at一次性任务调度命令

2025-04发布6次浏览

一次性任务调度命令:at

1. 简介

at 是一个用于在指定时间执行一次性任务的命令行工具。与 cron 不同,cron 通常用于周期性地执行任务,而 at 则适用于仅需执行一次的任务。例如,在特定的时间点发送一封邮件、运行一个脚本或关闭服务器等。

at 命令允许用户将任务安排在未来某个时间点运行,并且支持多种时间格式来指定任务的执行时间。


2. 安装 at

在大多数 Linux 发行版中,at 并不是默认安装的,需要手动安装。

  • Ubuntu/Debian:

    sudo apt-get install at
    
  • CentOS/RHEL:

    sudo yum install at
    

安装完成后,确保 atd 服务已启动并设置为开机自启:

sudo systemctl start atd
sudo systemctl enable atd

3. 使用方法

3.1 基本语法
at [选项] 时间
  • 时间: 指定任务执行的时间。
  • 选项: 可选参数,如 -f 指定脚本文件等。
3.2 时间格式

at 支持多种时间格式,包括但不限于以下几种:

  1. 绝对时间:

    • 格式:HH:MMYYYY-MM-DD HH:MM
    • 示例:at 14:30 表示当天下午 2:30 执行任务。
  2. 相对时间:

    • 格式:now + X (X 可以是 minutes、hours、days 或 weeks)
    • 示例:at now + 5 minutes 表示 5 分钟后执行任务。
  3. 自然语言:

    • 示例:at tomorrowat noonat midnight 等。
3.3 提交任务

在输入 at 命令并指定时间后,系统会进入交互模式,等待用户输入要执行的命令。输入完成后按 Ctrl+D 结束。

示例:

$ at 16:00
warning: commands will be executed using /bin/sh
at> echo "Hello, World!" > /tmp/output.txt
at> ^D
job 1 at 2023-10-05 16:00

上述命令会在当天下午 4:00 将字符串 "Hello, World!" 写入 /tmp/output.txt 文件。

3.4 查看任务列表

使用 atq 命令查看当前所有待执行的任务:

$ atq
1       2023-10-05 16:00 a root
3.5 删除任务

如果需要取消某个任务,可以使用 atrm 命令:

$ atrm 1

4. 实践案例

4.1 在 10 分钟后重启服务器
$ at now + 10 minutes
at> reboot
at> ^D
4.2 在明天早上 8:00 发送一封邮件

假设我们有一个脚本 send_email.sh 用于发送邮件,可以这样安排任务:

$ at 08:00 tomorrow
at> /path/to/send_email.sh
at> ^D
4.3 执行多个命令

可以在一行中写多个命令,或者通过 -f 参数指定包含命令的脚本文件:

$ at 22:00
at> echo "Backup started" >> /var/log/backup.log
at> tar -czf backup.tar.gz /data/
at> echo "Backup completed" >> /var/log/backup.log
at> ^D

或者使用脚本文件:

$ echo -e "echo 'Backup started' >> /var/log/backup.log\ntar -czf backup.tar.gz /data/\necho 'Backup completed' >> /var/log/backup.log" > backup_script.sh
$ chmod +x backup_script.sh
$ at 22:00 -f backup_script.sh

5. 注意事项

  1. 权限问题: 默认情况下,只有管理员可以使用 at 命令。可以通过编辑 /etc/at.allow/etc/at.deny 文件来控制用户权限。
  2. 日志记录: at 的执行结果会通过邮件发送给任务的创建者(前提是系统邮件功能已配置)。
  3. 时间冲突: 如果任务时间已经过去,at 会立即执行任务。

6. 扩展知识

  • batch 命令: 类似于 at,但 batch 会在系统负载较低时执行任务,而不是指定具体时间。
  • cron 对比: cron 更适合周期性任务,而 at 更适合一次性任务。