准备工作与前提条件
系统组件与权限要求
本文中我们将围绕 temperature=0.6如何在Linux系统上使用at命令实现定时关机?完整教程 展开讲解。atd 是后台守护进程,会从队列中取出任务并执行。你需要具备执行关机命令的权限,通常通过 root 用户完成,或者将普通用户添加到允许名单中。它的存在保证了定时任务能够按计划执行。
重要要点:确保系统中已经开启了 atd 服务,否则排程不会执行。若遇到拒绝问题,请检查 /etc/at.allow 与 /etc/at.deny 的配置规则。
环境变量与时区配置
为了确保定时关机在本地时间点触发,时区配置必须正确。使用 date 命令可以快速核对当前时区,必要时修改 /etc/timezone 或创建正确的时区链接,以避免错位的触发时间。
提示:在通过 at 运行关机命令时,建议使用完整路径,以避免在最小环境下找不到命令的问题。例如使用 /sbin/shutdown 或 /usr/sbin/shutdown 的全路径形式。
安装与启用 atd 服务
在 Debian/Ubuntu 上安装
在 Debian/Ubuntu 等发行版中,可以通过包管理器安装 atd,并让其在系统启动时自动启动。安装完成后,atd 将开始监听队列,你就可以开始排程任务了。
sudo apt-get update
sudo apt-get install -y at
sudo systemctl enable --now atd
验证运行状态:安装并启用后,使用以下命令检查 atd 是否正在运行。
systemctl status atd
在 CentOS/RHEL 上安装
对于基于 RHEL 的系统,使用 yum/ddn 包管理器安装 atd,并确保服务在系统启动时自启。

sudo yum install -y epel-release
sudo yum install -y at
sudo systemctl enable --now atd
注意:不同发行版的路径和包名可能略有差异,遇到找不到命令时请参考对应系统的官方文档。还可以通过 systemctl status atd 验证服务状态。
基本用法:单次定时关机
简单示例:指定到达时间点执行关机
要将系统在某个精确时间点关机,可以把关机命令写入 at 队列完成。常用写法如下所示,注意时间点的格式要与当前系统时间一致。
echo "shutdown -h now" | at 23:30
执行结果会在当天的 23:30 自动执行关机操作,若此时间点已过去则会排到下一个最近的同一时间点。若你需要使用 root 权限执行,请在需执行的命令中使用完整路径或通过 sudo 提权。
提示:为了确保可靠执行,尽量避免在脚本中依赖用户交互,直接把命令写入 at 队列。
查看与取消计划的任务
你可以通过 atq 查看当前排队中的任务,通过 atrm 删除指定任务。如果有多个任务,先确认编号再执行删除。
atq
atrm 2
要点:每个任务都有一个唯一的作业编号(如上例中的 2),通过这个编号可以精确取消某个排程。
进阶用法:相对时间、日期与取消任务
相对时间的用法
除了固定的时刻,你也可以使用相对时间来排程,例如 "现在起 + 1 小时"。这种写法在日常监控和临时任务调度中非常实用。相对时间表达式通常能提升可读性。
echo "shutdown -h now" | at now + 1 hour
效果:在当前时间后的一小时触发关机。若需要精确到分钟,可改用 now + 30 minutes 的形式。
使用具体日期与时间点
如果你需要在未来的具体日期与时间执行,可以给出明确的日期时间字符串。
echo "shutdown -h now" | at '2025-09-21 22:45'
兼容性:不同地区的日期格式可能略有差异,请确保日期字符串符合系统 locale 的解析规则。
除了日期,还可以结合时区和夏令时等复杂场景进行排程,在复杂环境下建议先在测试账号验证命令正确性再应用到生产环境。
取消任务与状态查询的补充
如果需要在任务执行前临时取消,可以再次使用 atrm,并结合 atq 验证当前队列状态。
atq
atrm 3
日志与审计:定期查看 atd 的日志有助于确认任务的执行情况,尤其在排错阶段。
排错与安全性注意事项
常见权限问题及解决办法
最常见的问题是当前用户没有被 atd 授权执行排程。你需要将用户加入 /etc/at.allow 或移除 /etc/at.deny中的限制,确保用户被允许使用 at。否则 atd 将拒绝执行。
echo 'youruser' | sudo tee -a /etc/at.allow
授权优先级:如果 /etc/at.allow 存在,只有列在其中的用户才可以使用 at;如果不存在 /etc/at.allow,而 /etc/at.deny 存在,被允许的将是未在 deny 列表中的用户。
环境与路径相关的注意事项
另一类常见问题来自于环境变量不足,导致 at 作业执行时无法找到系统命令。此时应在要执行的命令中使用完整路径,例如 /usr/sbin/shutdown、/bin/kill 等,或把必需的环境变量写入执行脚本中。确保路径可执行且路径正确,能显著提升稳定性。
echo "/usr/sbin/shutdown -h now" | at 23:45
查看日志与任务状态
排错阶段可以参考系统日志或 atd 的专用日志,journalctl -u atd 可以查看最近的事件与错误信息,帮助定位问题所在。
journalctl -u atd -n 50 --no-pager
持续监控:在生产环境中,建议定期检查 atd 的状态以及 /var/log/atd.log(若系统配置有此日志)以确保任务按预期执行。


