Linux中的at
命令是一个强大的计划任务工具,允许用户在指定的时间点执行一次性的命令或脚本,与cron
不同,at
命令适用于临时性、非重复的任务调度,特别适合那些需要在未来某个特定时间完成但不需要定期重复的场景,通过at
命令,用户可以灵活地安排任务执行时间,无论是具体的时间点还是时间间隔,都能轻松实现。

at
命令的基本使用
at
命令的基本语法为at [时间] [日期]
,其中时间和日期的格式非常灵活,用户可以输入at 10:30 AM tomorrow
表示在明天上午10:30执行任务,或者at now + 2 hours
表示从当前时间开始2小时后执行。at
命令还支持相对时间格式,如now + 3 days
或5:00 PM next week
等,在输入时间后,at
命令会进入交互模式,用户可以逐行输入要执行的命令,输入完成后按Ctrl+D
结束。
时间和日期的表示方法
at
命令支持多种时间表示方式,具体如下表所示:
时间格式示例 | 说明 |
---|---|
at 14:30 |
当天14:30执行 |
at 2:30 PM |
当天下午2:30执行 |
at now + 10 minutes |
当前时间后10分钟执行 |
at midnight |
午夜12点执行 |
at teatime |
下午4点执行(teatime是at 的别名) |
at 2023-12-31 23:59 |
指定日期和时间的具体执行时刻 |
任务输入与保存
在进入at
交互模式后,用户可以输入任意合法的Linux命令或脚本,要执行一个备份脚本,可以输入/home/user/backup.sh
;要发送邮件通知,可以输入echo "任务完成" | mail -s "通知" user@example.com
,需要注意的是,at
命令会继承当前用户的环境变量,因此确保命令在当前环境下可执行,如果任务需要特定的环境(如PATH变量),建议在任务中显式指定或使用bash -c
命令。
查看和管理待执行任务
使用atq
命令可以查看当前用户的所有待执行任务,任务列表会显示任务编号、执行时间和队列名称。atq
的输出可能类似于5 Wed Dec 20 14:30:00 2023 a user
,其中5
是任务编号,如果需要删除某个任务,可以使用atrm [任务编号]
,例如atrm 5
将删除编号为5的任务。at
命令还支持指定队列名称(通过-q
选项),以便区分不同优先级的任务。

权限与安全性
at
命令的执行权限受到系统严格限制,默认情况下,只有/etc/at.allow
文件中列出的用户才能使用at
命令,如果该文件不存在,则检查/etc/at.deny
文件,未被列入该文件的用户可以使用at
命令,如果两个文件都不存在,则只有root用户可以使用at
命令,这种机制确保了系统安全,防止未经授权的用户安排任务执行。
实际应用场景
at
命令在实际运维中非常实用,管理员可以在非高峰期安排系统维护任务,如at 2:00 AM
执行数据库备份;用户可以在离开电脑前设置定时任务,如at 6:00 PM "shutdown -h now"
实现定时关机,对于需要长时间运行的任务,at
命令可以结合nohup
使用,确保任务在用户退出后仍能继续执行。
相关问答FAQs
Q1: at
命令和cron
有什么区别?
A1: at
命令用于执行一次性任务,而cron
用于执行周期性任务。at
适合在特定时间运行一次备份脚本,而cron
适合每天凌晨固定时间执行备份。at
的任务只执行一次,而cron
的任务会按照设定的时间间隔重复执行。
Q2: 如何确保at
任务在执行时即使当前用户退出也能正常运行?
A2: 可以使用nohup
命令结合at
,例如at now + 1 hour <<EOF nohup your_command & EOF
,这样任务会以后台方式运行,不受用户退出的影响,确保任务脚本具有可执行权限,并在脚本中明确指定路径(如使用绝对路径)以避免环境问题。
