每天重新启动的 Cronjob

每天重新启动的 Cronjob

我设置了这个 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/shcron

尝试这个:

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,则必须以crontabroot 身份运行(或用于设置作业规范的任何命令)命令。

相关内容