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 的输出也不应直接发布。

参考资料