Daemon Cron失效求助:添加定时关机命令后系统未执行
排查cron定时关机任务未生效的步骤
别着急,咱们一步步来找出问题所在:
1. 先确认cron服务是否在运行
cron服务要是没启动,任务肯定不会执行。打开终端输入:
systemctl status cron
(如果是RHEL/CentOS系列,服务名是crond,命令改成systemctl status crond)
如果输出里没显示active (running),那就先启动服务并设置开机自启:
# Debian/Ubuntu systemctl start cron systemctl enable cron # RHEL/CentOS systemctl start crond systemctl enable crond
2. 检查/etc/crontab的语法与命令路径
你写的30 16 * * 1 root poweroff格式是对的(系统级crontab格式:分 时 日 月 周 用户 命令),但有个常见坑:cron的环境PATH很有限,可能找不到poweroff命令。
先查poweroff的绝对路径:
which poweroff
一般会输出/sbin/poweroff,把你的任务改成绝对路径试试:
30 16 * * 1 root /sbin/poweroff
另外,注意不要用制表符和空格混排,保持字段间用单个空格分隔就好。
3. 查看cron日志找线索
cron会把执行记录写到日志里,这是排查的关键。查看日志命令:
# Debian/Ubuntu grep cron /var/log/syslog # RHEL/CentOS tail -f /var/log/cron
- 如果看到类似
(root) CMD (/sbin/poweroff)的条目,说明cron已经执行了命令,但关机没生效,可能是权限或命令本身的问题(比如root权限是否正常,或者系统有其他阻止关机的进程)。 - 如果完全找不到这个任务的记录,说明cron没读取到你的任务,可能是文件格式错了,或者需要重启cron服务试试:
systemctl restart cron。
4. 验证系统时间与任务触发条件
- 用
date命令确认系统时间和时区是否正确,别以为是周一16:30,结果系统时区是UTC,实际时间差了好几个小时。 - 任务里的
1代表周一,你是不是在周一测试的?如果是其他日期,任务当然不会触发。可以临时改个测试任务,比如1分钟后执行:
* * * * * root echo "cron test success" >> /tmp/cron_test.log
等1分钟后看/tmp/cron_test.log是否生成,内容是否正确,快速验证cron是否能正常执行任务。
5. 检查cron限制文件
虽然root一般不受限制,但还是可以确认一下:
- 如果
/etc/cron.allow存在,root必须在这个文件里才能执行cron任务。 - 如果
/etc/cron.deny存在,root不能在这个文件里。
这两个文件默认一般不存在,要是有的话检查一下内容就行。
内容的提问来源于stack exchange,提问作者Joan Jara Bosch
相关产品推荐
相关产品推荐

