Linux中的at命令有什么用?
参考回答
at 命令用于在指定时间执行一次性任务,类似于 cron,但 cron 适用于周期性任务,而 at 只运行一次。例如:
echo "echo 'Hello, World!'" | at 14:30
- 这会在当天的 14:30 运行
echo 'Hello, World!'。
或者:
at 2pm tomorrow
然后在 at> 提示符下输入要执行的命令:
at> echo "Task executed!" > /tmp/task.log
at> <Ctrl+D> # 按 Ctrl+D 结束输入
任务会在明天下午 2 点执行。
详细讲解与拓展
1. at 命令的基本格式
at TIME
TIME可以是具体时间(如14:30)、相对时间(如now + 2 hours)、自然语言时间(如tomorrow)。
2. at 命令的时间格式
| 时间格式 | 说明 |
|---|---|
14:30 |
当天 14:30 执行任务 |
now + 30 minutes |
30 分钟后执行任务 |
now + 1 hour |
1 小时后执行任务 |
now + 2 days |
2 天后执行任务 |
tomorrow |
明天的这个时候执行任务 |
next Friday |
下周五执行任务 |
12:00 AM |
当天午夜执行任务 |
midnight |
午夜 00:00 执行任务 |
noon |
中午 12:00 执行任务 |
示例:
echo "shutdown -h now" | at now + 1 hour # 1 小时后关机
echo "echo 'Backup done!'" | at midnight # 午夜执行
3. 查看和管理 at 任务
查看已排队任务
atq
示例输出:
1 2024-01-30 14:30 a user
2 2024-01-30 16:00 a user
表示有两个 at 任务,分别在 14:30 和 16:00 运行。
删除 at 任务
使用 atrm(删除 at 任务),任务 ID 由 atq 获取:
atrm 1 # 删除 ID 为 1 的任务
4. 运行 at 任务时的环境
at 任务运行时不会继承当前 shell 的环境变量,而是使用 atd 进程的环境。因此:
– 变量可能不会生效:
“`bash
VAR="Hello" && echo 'echo VAR' | at now + 1 minute # 不会正确输出
“`
解决方案:在 `at` 任务中显式声明变量:
“`bash
echo ‘VAR=”Hello”; echoVAR’ | at now + 1 minute
“`
- 使用绝对路径避免路径问题:
echo "/usr/bin/python3 /home/user/script.py" | at 3am tomorrow
5. batch 命令:负载低时运行任务
batch 类似于 at,但它会等系统负载低(默认 0.8 以下)时执行任务:
echo "rsync -av /data /backup" | batch
适用于后台批量任务,如备份、日志清理等。
总结
at用于一次性定时任务,而cron适用于周期性任务。at TIME设定任务,支持多种时间格式。atq查看任务,atrm删除任务。batch用于系统负载低时执行任务。
at 适合临时定时任务,比如计划重启、定时备份、提醒操作等,是 cron 的好搭档。