at - 安排一次性定时任务
at 从标准输入或文件读取命令,并安排它们在未来执行一次。系统需要安装并运行对应的任务服务,具体包名和服务名因发行版而异。
提交任务
交互式输入任务后,按 Ctrl+D 完成提交:
at now + 10 minutes
at> /usr/local/bin/report-job >> "$HOME/report-job.log" 2>&1
at> <Ctrl+D>也可以从文件提交。提交时会保存文件当时的内容,之后修改原文件不会改变已排队任务:
at -f job.sh 22:30常见时间写法包括:
at 22:30
at 8:00 tomorrow
at now + 2 hours支持的日期、语言和时区格式受实现及区域设置影响。提交后应使用 atq 核对实际执行时间。
查看与取消
# 列出当前用户的等待任务
atq
# 查看任务内容
at -c JOB_ID
# 取消任务
atrm JOB_ID取消前应根据 atq 确认任务编号,避免删除错误的任务。
执行环境
任务在独立、非交互式 Shell 中运行,没有控制终端。为减少环境差异:
- 对命令和重要文件使用绝对路径。
- 明确重定向标准输出和标准错误。
- 不依赖交互式别名、函数或终端配置。
- 提交后检查任务内容和执行时间。
部分实现会将提交时的环境变量写入任务定义。不要把密码、访问令牌或其他敏感值放入命令或环境;at -c 的输出也不应直接发布。