使用 shutdown -h 22:30 可以在当天 22:30 执行一次性定时关机,但前提是拥有 root 或 sudo 权限;该命令仅单次生效,不会持久保存,也不会跨系统重启保留。如设置错误,必须使用 sudo shutdown -c 取消,Ctrl+C 无法撤销。

可以直接通过 shutdown -h 22:30 在 Linux 中设置指定时间关机,但必须使用 root 身份或具备 sudo 权限,而且该命令只执行一次,不会长期生效,也不会在重启后继续保留。
用 shutdown 指定绝对时间关机(如 22:30)
这是最直接、最常见的 Linux 定时关机方式,适合临时安排某一天的固定时刻关机,例如今晚工作结束后自动关机。
sudo shutdown -h 22:30:表示当天 22:30 自动关机;如果当前时间已经超过 22:30,通常会顺延到次日同一时间执行- 普通用户直接执行时通常会报错:
Failed to set reboot delay: Permission denied,因此必须配合sudo或切换为 root 用户 - 命令提交后终端不会被占用,而是立即返回提示信息,之后关机任务由 init 系统接管,不受终端关闭或会话退出影响
- 如果定时关机设置错误,只能通过
sudo shutdown -c取消;Ctrl+C不会生效,因为任务已经交给系统管理 - 不要写成
shutdown -h 22:30:00—— 秒数格式通常不被支持,部分 Linux 发行版会忽略秒字段,甚至直接提示语法错误
用 cron 实现每天固定时间关机(如每天 2:00)
如果你的需求是“每天凌晨 2 点自动关机”,那么单独使用 shutdown 命令并不能实现周期性任务,必须借助 cron 来定时触发。
- 先编辑 root 用户的 crontab:
sudo crontab -e,因为普通用户的crontab通常没有权限调用/sbin/shutdown - 添加任务行:
0 2 * * * /sbin/shutdown -h +0—— 注意这里必须写绝对路径/sbin/shutdown,不能只写shutdown - 不建议使用
now:/sbin/shutdown -h now在 cron 环境下可能因 PATH 不完整而执行异常;相比之下,+0更稳妥 - 为了便于排查问题,建议加上日志重定向:
0 2 * * * /sbin/shutdown -h +0 >> /var/log/shutdown.log 2>&1 - 检查任务是否配置成功:可用
sudo crontab -l查看计划内容,再通过sudo grep CRON /var/log/syslog确认执行记录
用 at 安排未来某天单次关机(如明天 10:15)
当你想在“明天上午 10:15”这样的未来具体时间执行一次关机,又不希望它每天重复运行时,at 往往比 cron 更适合,使用起来也更轻量。
- 先确认
atd服务是否正在运行:sudo systemctl is-active atd,如果返回inactive,则需要执行sudo systemctl enable --now atd - 提交任务命令:
echo "/sbin/shutdown -h now" | at 10:15 tomorrow—— 注意写法不是at tomorrow 10:15,参数顺序不能写错 - 可使用
atq查看当前任务编号,使用atrm 3删除编号为 3 的任务 - ⚠️ 一个关键限制是:所有
at任务在系统重启后都会被自动清空,因此不具备持久化能力 - 尽量避免使用模糊时间语法:
at now + 30 minutes在部分发行版中(例如较旧版本的 CentOS)兼容性较差,优先选择明确的时间点更安全
systemd timer 不是必要选择,除非你已有定制化需求
对于普通的 Linux 自动关机场景来说,systemd timer 往往显得过于复杂。它更适合需要任务状态跟踪、依赖其他 unit,或者希望统一接入 journal 日志审计的高级使用场景。
- 启用时通常需要编写两个文件:
.service(定义关机动作)和.timer(定义触发规则),维护成本明显高于一条简单的 cron 任务 - 它的优势主要体现在:可以通过
systemctl status my-shutdown.timer查看状态,支持OnCalendar=Mon,Wed,Thu 02:00这类更复杂的周期配置,并且在系统重启后仍然有效 - 如果你的需求只是“每天凌晨 2 点自动关机”,那直接上 systemd timer 就有些大材小用了——虽然能实现,但并不是最简洁的方案
很多人在配置 Linux 定时关机时最容易忽略的,其实就是权限和路径这两个关键点:无论你使用的是 cron、at 还是其他调度方式,最终真正执行的都是 /sbin/shutdown;而这个可执行文件默认通常只存在于 root 用户的 PATH 中。普通用户即使把任务写对了,如果没有足够权限,结果仍然无法正常执行。还需要明确一点:shutdown 命令本身并不具备“自动定时运行”的能力,它本质上只是一个关机执行工具。真正实现自动关机的,是外层的调度机制,例如 cron、at 或 systemd,而不是 shutdown 自带的功能。
