直接取消 shutdown 定时任务用 sudo shutdown -c,它专用于撤销由 shutdown 命令(如 sudo shutdown +30 或 sudo shutdown 22:00)设置的单次关机计划,立即生效且无需重启;对 cron 或 systemd timer 设置的任务无效,需分别通过 crontab 编辑或 systemctl 操作处理。

直接取消 shutdown 定时任务用 sudo shutdown -c
只要关机计划是用 shutdown 命令设置的(比如 sudo shutdown +30 或 sudo shutdown 22:00),sudo shutdown -c 就能立刻终止它。系统会广播一条取消消息,例如 Shutdown scheduled for 22:00 has been canceled;如果没任务在等,就可能静默返回或提示 No shutdown is pending。
这个命令不依赖你记得当初设的时间点,也不需要查进程或 PID —— 它直接向 shutdown 的守护逻辑发取消信号,是唯一官方支持的撤销方式。
-
shutdown -c必须加sudo,普通用户无权取消全局关机计划 - 执行后无需重启、重载服务,生效是即时的
- 即使你是在 SSH 会话里设置的定时关机,从另一台终端或本地 TTY 执行该命令也有效
别把 crontab 和 shutdown 混了
如果你是用 crontab 添加了一条类似 0 23 * * * /sbin/shutdown -h now 的定时关机任务,那 sudo shutdown -c 不起作用——它只管 shutdown 自己挂起的那个单次计划,不管 cron 的周期性作业。
这时得进 cron 编辑器删掉对应行:
- 运行
sudo crontab -e,找到那行 shutdown 命令,删掉保存 - 或者直接清空整个 root 的 cron 表:
sudo crontab -r(慎用,会删所有任务) - 确认是否还有残留:
sudo crontab -l输出为空或不含 shutdown 就算清理干净
为什么 Ctrl+C 有时无效
有人试过在终端里敲了 sudo shutdown +10 后立刻按 Ctrl+C,发现关机照样发生。这是因为 shutdown 默认是前台阻塞执行:一旦命令被接受,它就 detach 成后台服务,不再绑定当前 shell 的信号处理。
只有两种情况 Ctrl+C 有用:
- 命令刚敲完、还没真正提交前(比如还在输入参数阶段)
- 你加了
&把它丢到后台运行,此时Ctrl+C对当前 shell 无影响,但你可以用kill %1或找对应 PID 杀掉 —— 不推荐,容易漏杀
所以别赌 Ctrl+C,认准 sudo shutdown -c 才稳。
systemd timer 设置的关机也不能靠 -c
如果用了 systemd timer(比如写了 saturday-shutdown.timer 和配套 service),那 shutdown -c 完全不感知这类任务。它只响应传统 init 系统下的 shutdown 调度。
要停掉这类关机,得走 systemd 流程:
- 先查状态:
systemctl list-timers --all | grep shutdown - 停用 timer:
sudo systemctl stop saturday-shutdown.timer - 禁用开机自启:
sudo systemctl disable saturday-shutdown.timer - 必要时也停掉对应 service:
sudo systemctl stop saturday-shutdown.service
真正麻烦的不是命令记不住,而是搞不清关机任务到底由谁调度——shutdown、cron、还是 systemd。看日志最保险:journalctl -u systemd-logind | grep -i shutdown 或 journalctl -r | grep -i "shut\|poweroff",能快速定位源头。


















