Linux at 命令详解:一次性定时任务调度工具
at 命令是 Linux 系统中用于在指定时间点执行一次性任务的经典工具。与周期性任务调度器 cron 不同,at 任务执行一次后便会自动从队列中移除,适用于临时的、单次的自动化操作。
核心机制
at 命令的运行依赖于后台守护进程 atd。其工作流程如下:
用户通过 at 命令提交一个包含指令或脚本的任务及其执行时间。
atd 进程在后台运行,默认每 60 秒检查一次作业队列。
当系统时间与任务设定的时间匹配时,atd 会调用相应的 shell 来执行该任务。
使用前请务必确保 atd 服务已启动,可使用以下命令检查:
systemctl status atd # 查看服务状态
# 或
ps -ef | grep atd # 检查进程是否存在
命令格式与常用选项
基本命令格式:
at [选项] [时间]
任务内容可以在输入命令后,在随后的交互式提示中逐行输入,最后按 Ctrl + D 结束并提交。
常用选项速查表:
| 选项 | 功能描述 | 等效命令 |
|---|---|---|
-m |
任务完成后,无论是否有输出,都向用户发送邮件通知。 | |
-l |
列出当前用户所有待执行的 at任务。 |
atq |
-d <编号> |
删除指定编号的 at任务。 |
atrm <编号> |
-c <编号> |
查看(cat)指定编号任务的具体命令内容。 | |
-f <文件> |
从指定的脚本文件中读取任务命令,而非标准输入。 | |
-t <时间> |
使用 [[CC]YY]MMDDhhmm[.ss]格式直接指定时间。 |
|
-v |
显示任务的详细计划执行时间。 |
时间参数的指定方法
at 的强大之处在于其高度灵活的时间设定方式。
| 类别 | 格式示例 | 说明 |
|---|---|---|
| 标准时间 | 08:30 |
当天 8:30。若已过时,则顺延至次日。 |
| 模糊时间 | midnight, noon, teatime |
分别代表午夜 (00:00)、中午 (12:00)、下午茶 (通常 16:00)。 |
| 12小时制 | 11:00 PM, 9:30am |
需明确标注 AM/PM 或 am/pm。 |
| 具体日期 | 11:00 2025-12-25 11:00 12/25/2025 |
在时间后加上日期。支持 YYYY-MM-DD、MM/DD/YY等格式。 |
| 相对计时 | now + 2 hours now + 30 minutes now + 1 week |
从当前时间算起。单位可为 minutes、hours、days、weeks。 |
| 自然日期 | tomorrow 17:00 next Monday |
使用自然语言指定。 |
实战应用案例
1、5 天后下午 5 点,列出 /home 目录内容
at 5pm +5 days
# 进入交互输入模式
/bin/ls -la /home
# 按 Ctrl + D 提交
2、查看当前排队中的任务
atq
# 或
at -l
输出示例:
7 Sat Mar 15 17:00:00 2025 a username
3、明天下午 5 点,将当前时间写入日志文件
at 5pm tomorrow
date >> /root/date.log
# 按 Ctrl + D 提交
4、通过脚本文件提交复杂任务
首先创建脚本 myscript.sh,然后:
at -f /path/to/myscript.sh 09:00 next Monday
5、删除已计划的任务
假设通过 atq 查得任务编号为 7:
atrm 7
# 或
at -d 7
重要注意事项与技巧
- 权限管理:系统管理员可以通过
/etc/at.allow和/etc/at.deny文件来控制允许或禁止使用at命令的用户。 - 环境变量:
at任务在执行时会继承当前用户的环境变量,包括当前的工作目录 (PWD)。 - 输出处理:任务的标准输出和错误默认会通过邮件发送给提交者。如果希望静默执行,可以在命令末尾重定向输出,例如:
command > /dev/null 2>&1。 at与cron的选择: 用at:一次性的、临时的任务(如“2 小时后重启服务”、“明天早上下载文件”)。 用cron:周期性的、固定频率的任务(如“每天凌晨备份”、“每周一清理日志”)。
总结
at 命令是 Linux 系统管理工具箱中一个轻巧而强大的“定时单次执行”工具。掌握其灵活的时间设定语法和任务管理选项(atq, atrm),可以高效地自动化处理各种临时性后台作业。
版权声明:本文为 阡陌 的原创文章,遵循「CC BY-NC-SA 4.0」版权协议。若转载,请附上本文链接及本声明。
本文地址:https://www.mculoop.com/archives/158.html
若对本文有疑问可在评论区留言,我们看到后会尽量解答。