在Linux系统中,at命令是一个强大的计划任务工具,允许用户在指定的时间点执行单次命令或脚本,与周期性执行的cron不同,at命令更适合一次性任务,例如系统维护、数据备份或定时发送报告等,本文将详细介绍at命令的调用方法、使用场景及注意事项。

at命令的基本调用格式为at [选项] 时间,其中时间参数可以采用多种格式,如具体时间(如14:30)、相对时间(如now+3小时)或日期(如明天9:00),若需在当前时间后10分钟执行脚本backup.sh,可输入at now+10 minutes,然后在提示符后输入/path/to/backup.sh并按Ctrl+D结束输入,at命令支持交互式输入,也支持通过-f选项指定脚本文件,如at -f script.sh 23:59。
在使用at命令前,需确保atd服务已启动并设置为开机自启,可通过systemctl status atd检查服务状态,若未运行则执行systemctl start atd和systemctl enable atd,at命令的执行权限受/etc/at.allow和/etc/at.deny文件控制,若/etc/at.allow存在,仅允许其中的用户使用at命令;若不存在但/etc/at.deny存在,则拒绝该文件中的用户使用;若两文件均不存在,则root用户可使用,其他用户需具备/etc/at.deny的写权限。
at命令的常用选项包括:-m,任务执行后发送邮件给用户;-l或atq,列出当前待执行的任务;-d [任务号]或atrm [任务号],删除指定任务;-v,显示任务执行的时间戳。atq会显示类似12345 2023-10-01 14:30:00 a user的任务列表,其中12345为任务ID。
对于复杂的任务,可在at命令中直接编写多行命令。

at now+1 hour
> mkdir -p /tmp/test
> echo "Task completed" >> /tmp/test/log
> EOF
此任务将在1小时后创建目录并写入日志文件,at命令的环境变量继承自当前用户,但需要注意PATH变量可能受限,建议使用绝对路径执行命令。
以下是at命令调用示例的简要对比:
| 操作场景 | 命令示例 | 说明 |
|---|---|---|
| 定时执行脚本 | at -f backup.sh 03:00 |
凌晨3点执行backup.sh |
| 相对时间任务 | at now+30 minutes |
30分钟后交互式输入命令 |
| 列出任务 | atq |
显示所有待执行任务 |
| 删除任务 | atrm 12345 |
删除任务ID为12345的任务 |
在使用at命令时,需注意以下几点:1)任务执行时间需在系统当前时间之后;2)若系统在指定时间关机,任务可能不会执行;3)at命令执行的任务以当前用户身份运行,需注意权限问题;4)长时间运行的任务可能导致系统负载升高,建议合理设置任务优先级。
相关问答FAQs:

-
问题:at命令与cron命令有什么区别?
解答:at命令用于执行单次任务,而cron命令用于周期性执行任务(如每天、每周),at的任务执行一次后即消失,而cron的任务会按照设定周期重复执行,at的配置文件为/etc/at.allow和/etc/at.deny,而cron的配置文件为/etc/cron.allow和/etc/cron.deny,以及用户的crontab文件。 -
问题:如何查看at命令的执行结果?
解答:at命令的执行结果默认会通过邮件发送给当前用户,若需查看邮件,可使用mail命令进入邮箱界面,若未配置邮件服务,可通过-m选项强制发送邮件,或在脚本中重定向输出到文件,例如at -f script.sh 10:00中,在script.sh内添加command >> /path/to/log.txt将输出保存到日志文件。
