我设置了这个 cronjob 因为我希望我的服务器每天 05:00 重新启动
# file: /etc/cron.d/reboot
* 5 * * * root reboot &> /dev/null
我认为它第一次起作用,因为我被踢出了 ssh 连接。但几天后我回来发现了这一点:
$ uptime
07:12:13 up 7 days
这是不是意味着已经7天没有重启了?怎么了?
答案1
正如其他评论员所说,如果uptime
报告 7 天的正常运行时间,则系统在此期间尚未重新启动。
除了@Dennis的正确评论之外,暂时删除管道/dev/null
,然后检查root
的邮件和/var/log/syslog
.
如果reboot
命令不在执行 shell 上PATH
,则 cron 可能根本找不到它。
有些系统没有该reboot
命令,在这种情况下您需要使用shutdown -r now
.
答案2
重定向 stderr 和 stdout 的语法在 bash 中有效,但在用于执行命令的&>
中可能不起作用。/bin/sh
cron
尝试这个:
0 5 * * * root reboot > /dev/null 2>&1
这也修复了 Dennis Kaarsemaker 评论中指出的时间错误。
(我首先不会评论这是否是一个好主意。)
答案3
我认为我能给你的最好答案是找一个系统管理员,他可以找出盒子出了什么问题以及为什么重新启动需要这么长时间。针对您的“问题”的所有其他可能的解决方案(例如检查$PATH
、使用绝对路径reboot
或使用shutdown -r
)都只是解决方法,它们将使您的 cronjob 正常工作,但让您对实际问题一无所知。
答案4
检查您已安装的手册页cron
。它可以执行各种操作,具体取决于实现 - 例如在执行所需操作之前仅设置特定变量(即 not PATH
,这可能导致reboot
找不到)。
除了时间定义中的第一个星号不正确之外,我相信“root”字符串不正确,文件应如下所示:
# file: /etc/cron.d/reboot
0 5 * * * reboot &> /dev/null
否则它会失败,因为它尝试root
使用 argument进行调用reboot
。如果要设置 root 的 crontab,则必须以crontab
root 身份运行(或用于设置作业规范的任何命令)命令。