at
命令是 Linux 系统中一个非常实用的定时任务工具,它允许用户在指定的时间点执行一次性的命令或脚本,与 cron
不同,cron
用于设置周期性重复的任务,而 at
则专注于执行一次性的任务,例如在未来的某个特定时间发送邮件、备份文件或执行维护脚本,本文将详细介绍 at
命令的使用方法、常用选项、实际应用场景以及注意事项。

at
命令的基本语法
at
命令的基本语法结构如下:
at [选项] 时间
时间
参数可以有多种格式,例如具体的时间点(如 14:30)、相对时间(如 now + 1 hour)、日期(如 tomorrow 10:00)等,执行 at
命令后,系统会进入交互式模式,用户需要输入要执行的命令或脚本内容,最后按 Ctrl + D
组合键结束输入。
at
命令的常用选项
at
命令提供了一些选项来控制任务的行为,以下是常用的选项及其说明:
选项 | 说明 |
---|---|
-f 文件 |
从指定文件中读取要执行的命令,而不是从标准输入。 |
-l |
列出当前等待执行的所有 at 任务,等同于 atq 命令。 |
-d 任务号 |
删除指定的 at 任务,等同于 atrm 任务号 命令。 |
-m |
任务执行完成后,即使没有标准输出,也通过邮件发送任务执行结果。 |
-V |
显示 at 命令的版本信息。 |
-q 队列 |
指定任务要放入的队列(默认是 a ,队列可以是 a 到 z 或 A 到 Z )。 |
at
命令的时间格式
at
命令支持多种时间格式,以下是常见的时间表示方法:

-
绝对时间:
- 具体时间点:
at 14:30
(表示今天的 14:30 执行)。 - 具体日期和时间:
at 10:00 2023-12-31
(表示 2023 年 12 月 31 日 10:00 执行)。 - 12 小时制时间:
at 2:30 PM
(表示今天的下午 2:30 执行)。
- 具体时间点:
-
相对时间:
now + 时间单位
:at now + 1 hour
(表示当前时间后 1 小时执行)。at now + 10 minutes
(表示当前时间后 10 分钟执行)。at now + 3 days
(表示当前时间后 3 天执行)。
-
日期时间组合:
at tomorrow 09:00
(表示明天的 09:00 执行)。at teatime
(表示下午 4 点,teatime
是at
命令的内置别名)。at midnight
(表示午夜 12 点)。at noon
(表示中午 12 点)。
at
命令的使用步骤
使用 at
命令执行一次性任务通常包括以下步骤:

-
输入
at
命令和时间: 在终端中输入at
命令,并指定执行时间,设置任务在 1 小时后执行:at now + 1 hour
-
输入要执行的命令: 系统会进入交互式模式,提示用户输入要执行的命令或脚本内容。
at> echo "Hello, this is a test task" >> /tmp/test.log at> ls -l /tmp at> <Ctrl + D>
输入完成后,按
Ctrl + D
组合键结束输入,系统会显示任务信息,job 3 at Mon Dec 11 14:30:00 2023
3
是任务号,用于后续管理任务。 -
从文件读取命令: 如果需要执行的命令较多,可以先将命令写入文件,然后使用
-f
选项指定文件。cat > task.sh << EOF #!/bin/bash echo "Task executed at $(date)" > /tmp/task_result.log EOF at now + 30 minutes -f task.sh
管理 at
任务
-
列出待执行任务: 使用
atq
命令或at -l
命令可以查看当前所有等待执行的at
任务:atq
输出示例:
3 Mon Dec 11 14:30:00 2023 a user 4 Mon Dec 11 18:00:00 2023 a user
第一列是任务号,第二列是执行时间,第三列是队列名称,第四列是用户名。
-
删除
at
任务: 使用atrm
命令或at -d
命令可以删除指定的任务,需要提供任务号,例如删除任务 3:atrm 3
执行后,再次运行
atq
命令会发现任务 3 已被移除。
at
命令的权限与安全
-
权限控制:
at
命令的执行权限受到系统配置文件的限制,在/etc/at.deny
和/etc/at.allow
文件中可以控制哪些用户可以使用at
命令。/etc/at.allow
文件存在,则只有该文件中列出的用户可以使用at
命令。/etc/at.allow
文件不存在,则检查/etc/at.deny
文件,该文件中列出的用户将被禁止使用at
命令,其他用户可以使用。- 默认情况下,
/etc/at.deny
文件可能包含daemon
、bin
、sys
等系统用户,而普通用户默认可以使用at
命令。
-
安全注意事项:
- 由于
at
任务会在指定时间以当前用户的权限执行,因此需要确保执行的命令或脚本是安全的,避免执行恶意代码。 at
任务需要较高权限,建议使用sudo
执行at
命令,但需注意权限传递的问题。
- 由于
at
命令的实际应用场景
-
定时发送邮件: 可以设置
at
任务在特定时间发送邮件,at 09:00 tomorrow at> echo "This is a reminder: Meeting at 10:00 AM" | mail -s "Reminder" user@example.com at> <Ctrl + D>
-
定时备份文件: 使用
tar
命令定时备份重要文件:at now + 2 days at> tar -czf /backup/important_files_$(date +%Y%m%d).tar.gz /path/to/important/files at> <Ctrl + D>
-
定时清理临时文件: 定期清理系统中的临时文件:
at 03:00 Sunday at> find /tmp -type f -mtime +7 -delete at> <Ctrl + D>
at
命令的注意事项
-
at
守护进程:at
命令的正常运行依赖于atd
守护进程。atd
服务未启动,at
任务将无法执行,可以使用以下命令检查和启动atd
服务:systemctl status atd systemctl start atd
-
任务执行环境:
at
任务的执行环境可能与当前终端环境不同,例如环境变量、工作目录等,如果任务依赖特定的环境,建议在脚本中显式设置或使用source
命令加载配置文件。 -
任务冲突: 如果多个
at
任务在同一时间执行,可能会对系统资源造成压力,建议合理规划任务时间,避免资源竞争。
相关问答 FAQs
问题 1:如何查看 at
任务的执行结果?
解答:at
任务的执行结果默认会通过邮件发送到执行任务的用户邮箱,如果需要将结果输出到文件,可以在命令中重定向输出,
at now + 1 hour at> your_command > /tmp/task_output.log 2>&1 at> <Ctrl + D>
使用 -m
选项可以在任务没有标准输出时也强制发送邮件通知。
问题 2:at
任务被取消后是否可以恢复?
解答:at
任务被删除(通过 atrm
或 at -d
)后无法直接恢复,如果需要恢复,只能重新创建任务,在删除任务前建议确认任务的必要性,或备份重要的任务命令。