at
是 Linux 中用于安排一次性定时任务的核心工具,它允许用户在指定时间执行命令或脚本(例如备份文件、发送邮件或重启服务),任务执行后自动消失,适合临时性计划任务。
安装与基本语法
-
安装(多数系统已预装)
若未安装,执行以下命令:sudo apt install at # Debian/Ubuntu sudo yum install at # CentOS/RHEL
-
启动服务
sudo systemctl enable --now atd # 启用并启动守护进程
-
基础语法
at [选项] 时间
输入命令后按
Enter
,在at>
提示符下输入要执行的命令,最后按Ctrl+D
保存。
指定时间的 5 种常用格式
-
具体时间点
at 14:30 # 14:30 at 2:30 PM # 14:30(12小时制) at 09:00 2025-08-01 # 指定日期
-
相对时间
at now + 2 hours # 2小时后 at now + 30 min # 30分钟后 at noon + 1 day # 明天中午
-
at midnight # 今晚午夜 at teatime # 下午16:00(系统默认)
核心操作示例
-
创建定时任务
$ at now + 5 min at> /home/user/backup.sh # 输入要执行的脚本 at> echo "Done!" | mail -s "Alert" admin@example.com at> <EOT> # 按 Ctrl+D 保存 job 3 at Mon Jul 15 10:25:00 2025
-
查看队列中的任务
atq # 列出所有待执行任务 # 输出示例:3 Mon Jul 15 10:25:00 2025 a user
-
删除任务
atrm 3 # 删除ID为3的任务
-
从文件读取命令
at 15:00 -f /path/to/script.sh
实用选项详解
选项 | 作用 |
---|---|
-m |
任务完成后发送邮件给用户 |
-c 任务ID |
查看任务的详细命令内容 |
-l |
等同 atq ,列出任务 |
-d 任务ID |
等同 atrm ,删除任务 |
-t 时间 |
使用 [[CC]YY]MMDDhhmm 格式时间 |
注意事项
-
权限控制
- 通过
/etc/at.allow
和/etc/at.deny
文件管理用户权限:- 若
at.allow
存在,仅允许列表中的用户使用at
- 若
at.allow
不存在,检查at.deny
(黑名单) - 两文件均不存在时,仅 root 可用
- 若
- 通过
-
环境变量问题
at
默认使用最小环境变量,建议在脚本中使用绝对路径:at 08:00 at> /usr/bin/python3 /data/scripts/cleanup.py # 推荐
-
输出处理
命令的输出会通过邮件发送给用户(除非重定向):at 09:00 <<EOF /opt/monitor.sh > /tmp/log.txt 2>&1 # 重定向输出到文件 EOF
常见问题解决
-
任务未执行?
- 检查
atd
服务状态:systemctl status atd
- 查看系统日志:
journalctl -u atd
- 确认时间格式正确(避免时区混淆)
- 检查
-
如何调试任务?
使用-c
查看任务内容:at -c 3 | less # 检查ID为3的任务详情
-
与
cron
的区别
| 工具 | 类型 | 适用场景 |
|——–|————|————————|
|at
| 一次性任务 | 临时计划(如维护提醒) |
|cron
| 周期性任务 | 日常自动化(如日志清理)|
安全实践
- 敏感操作限制:避免在
at
中执行rm -rf /
等危险命令 - 日志审计:通过
syslog
查看/var/log/syslog
中的atd
记录 - 权限最小化:普通用户任务应限制在个人目录内
引用说明参考 Linux 官方手册(
man at
)、IBM 开发者文档及 Red Hat 系统管理指南,实践前请确认您的系统版本,部分选项可能因发行版差异略有不同。
原创文章,发布者:酷番叔,转转请注明出处:https://cloud.kd.cn/ask/8262.html