Linux中的at命令有什么用?

参考回答

at 命令用于在指定时间执行一次性任务,类似于 cron,但 cron 适用于周期性任务,而 at 只运行一次。例如:

echo "echo 'Hello, World!'" | at 14:30
Bash
  • 这会在当天的 14:30 运行 echo 'Hello, World!'

或者:

at 2pm tomorrow
Bash

然后在 at> 提示符下输入要执行的命令:

at> echo "Task executed!" > /tmp/task.log
at> <Ctrl+D>  # 按 Ctrl+D 结束输入
Bash

任务会在明天下午 2 点执行。


详细讲解与拓展

1. at 命令的基本格式

at TIME
Bash
  • 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  # 午夜执行
Bash

3. 查看和管理 at 任务

查看已排队任务
atq
Bash

示例输出:

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 的任务
Bash

4. 运行 at 任务时的环境

at 任务运行时不会继承当前 shell 的环境变量,而是使用 atd 进程的环境。因此:
– 变量可能不会生效:

“`bash
VAR="Hello" && echo 'echo ParseError: KaTeX parse error: Expected 'EOF', got '#' at position 27: …ow + 1 minute #̲ 不会正确输出 “` …VAR’ | at now + 1 minute
“`

  • 使用绝对路径避免路径问题:
    echo "/usr/bin/python3 /home/user/script.py" | at 3am tomorrow
    
    Bash

5. batch 命令:负载低时运行任务

batch 类似于 at,但它会等系统负载低(默认 0.8 以下)时执行任务:

echo "rsync -av /data /backup" | batch
Bash

适用于后台批量任务,如备份、日志清理等。


总结

  • at 用于一次性定时任务,而 cron 适用于周期性任务。
  • at TIME 设定任务,支持多种时间格式
  • atq 查看任务,atrm 删除任务。
  • batch 用于系统负载低时执行任务

at 适合临时定时任务,比如计划重启、定时备份、提醒操作等,是 cron 的好搭档。

发表评论

后才能评论