我刚刚从 11.04 服务器切换到 Ubuntu 14.04 服务器。在 /var/spool/cron/crontabs/root 中,我有以下行:
* * * * * /root/arewerunning.sh > /root/appmon.log
arewerunning.sh 如下所示:
#!/bin/sh
if P=$(pgrep aserver)
then
echo " "
else
echo "aserver has stopped. System Will reboot"
sudo reboot now
fi
在 11.04 服务器上,此方法有效。每当我关闭服务器时,系统都会重新启动。但在 14.04 上,命令似乎正在运行,但系统不会重新启动。cron.log 如下所示:
(root) CMD (/root/arewerunning.sh > /root/appmon.log)
当进程还没有被终止时:
(root) CMD (/root/arewerunning.sh > /root/appmon.log)
(CRON) info (No MTA installed, discarding output)
当进程被终止时。我知道 MTA 线路是因为它试图给我发电子邮件但发不出来,但这不应该阻止重新启动。
我尝试在 cron 之外运行该命令,它运行良好。我使用的是直接路径,所以这应该不是问题。我还尝试在命令前面添加“sh”。appmon.log 没有显示任何内容。我尝试将其他命令放入文件中,它们运行良好。
答案1
我找到了!问题出在重启的路径问题上。我不得不在 arewerunning.sh 中输入“sudo /sbin/reboot now”。我读过有关其他命令的路径问题的文章,但没有想到重启也是一个路径可能被篡改的命令。