答案:系统级定时关机提醒文案需修改 /etc/crontab 或 /etc/cron.d/ 中含 wall 的命令行,例如 0 23 * root echo "文案" | wall; shutdown -h now,须用绝对路径、指定用户root、避免sudo,并检查 /var/log/cron 确认执行。

crontab -e 不能改系统级关机提醒文案,因为定时关机本身不带提醒功能;真正要改的是你手动写的关机命令里附带的 wall 或 echo 部分。
系统级定时关机任务通常怎么写
常见写法是把 shutdown 和 wall 组合进一条 cron 行,比如:
0 23 * * * /bin/bash -c 'echo "System will shut down in 5 minutes!" | /usr/bin/wall; /sbin/shutdown -h +5'
注意两点:
- 这不是系统自带的“提醒”,而是你脚本里显式调用
wall发送的 - 系统级任务一般写在
/etc/crontab或/etc/cron.d/下的文件里,不是用户 crontab
修改 /etc/crontab 里的关机任务文案
直接编辑系统 crontab 文件:
sudo vi /etc/crontab
找到类似这行(含 wall):
0 23 * * * root echo "Server shutting down NOW" | wall; shutdown -h now
把引号里的文案改成你要的,比如:
0 23 * * * root echo "⚠️ Maintenance window starting — system will power off shortly" | wall; shutdown -h now
保存退出即可。不需要重启 crond,它会自动 reload。
-
/etc/crontab格式多一列:分、时、日、月、周、用户名、命令 - 必须指定执行用户(如
root),否则wall会因权限失败 - 避免用
sudo在 cron 里——它没 TTY,会卡住或报错
用 /etc/cron.d/ 替代 /etc/crontab 更规范
推荐把自定义任务单独放 /etc/cron.d/ 目录下,比如:
sudo vi /etc/cron.d/shutdown-notice
内容示例:
# Run at 22:50 daily, warn then shut down at 23:00 50 22 * * * root /bin/echo "System shutdown scheduled for 23:00 — save your work!" | /usr/bin/wall 0 23 * * * root /sbin/shutdown -h now
这样更易维护,也避免误改 /etc/crontab 原始格式。
- 文件名不能带点(
.sh等后缀会被忽略) - 文件权限必须是
644,且属主为root,否则 cron 会跳过加载 - 每行末尾不能有空格或制表符,否则整个条目失效
为什么改了不生效?常见坑
最常踩的几个点:
-
wall只对当前已登录的终端用户广播,SSH 断连后或无人登录时看不到 - 脚本里用了
$(date)或其他 shell 特性,但 cron 默认用/bin/sh,不支持$()—— 改成`date`或显式指定解释器:/bin/bash -c '...' - 路径没写全:
echo和wall建议用绝对路径(/bin/echo、/usr/bin/wall),cron 的$PATH很窄 - 中文字符在某些 locale 下显示乱码,建议先确认系统
LANG设置,或改用英文文案保底
真正容易被忽略的是:cron 不管你文案写得多漂亮,只要执行命令失败(比如 wall 权限不够、shutdown 被别的进程锁住),整行就静默跳过 —— 查 /var/log/cron 才能确认是否真跑起来了。











