![如果服务器出现故障,如何使用 crontab 自动重新启动服务器?](https://linux22.com/image/58981/%E5%A6%82%E6%9E%9C%E6%9C%8D%E5%8A%A1%E5%99%A8%E5%87%BA%E7%8E%B0%E6%95%85%E9%9A%9C%EF%BC%8C%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20crontab%20%E8%87%AA%E5%8A%A8%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E6%9C%8D%E5%8A%A1%E5%99%A8%EF%BC%9F.png)
我有一个 jar 文件,我在 Ubuntu 10.10 中像这样运行,然后它在后台启动我的展示服务器 -
nohup java \
-jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
-c file --fsconfigdir /opt/exhibitor/conf \
--hostname machineA > exhibitor.out &
现在我正在尝试crontab
检查我的参展商服务器是否正在运行。如果它没有运行,则再次启动它,所以我决定使用 crontab,并执行了以下步骤来设置 crontab -
- 通过运行创建了一个新的 crontab
crontab -e
。 将这一行添加到刚刚打开的文件中
*/5 * * * * pgrep -f exhibitor || nohup java -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out
保存文件并退出编辑器。
因此,为了测试目的以查看我的 crontab 是否正常工作,我首先像这样启动了我的展览服务器 -
$ nohup java \
-jar ./exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
-c file --fsconfigdir /opt/exhibitor/conf \
--hostname machineA > exhibitor.out &
[1] 14401
$ nohup: ignoring input and redirecting stderr to stdout
然后我按照上面所示的步骤设置我的 crontab。之后我kill -9 14401
这样做了,我可以看到我的参展商服务器是否由 crontab 自动重新启动。显然,他们没有启动,我也没有看到任何错误。以下是日志 -
$ sudo tail -f /var/log/syslog
Nov 5 17:21:45 machineA crontab[12755]: (cronusapp) BEGIN EDIT (cronusapp)
Nov 5 17:23:17 machineA crontab[12755]: (cronusapp) END EDIT (cronusapp)
Nov 5 17:25:01 machineA CRON[13671]: (root) CMD ( puppet apply /etc/puppet/manifests/motd-stats.pp >>$PUPPET_LOG 2>&1)
Nov 5 17:25:01 machineA CRON[13672]: (root) CMD (command -v debian-sa1 > /dev/null && debian-sa1 1 1)
Nov 5 17:25:01 machineA CRON[13673]: (cronusapp) CMD (pgrep -f exhibitor || nohup java -jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar -c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out)
Nov 5 17:25:01 machineA postfix/pickup[2345]: 2B0D8819F9: uid=78402 from=<cronusapp>
Nov 5 17:25:01 machineA postfix/cleanup[13679]: 2B0D8819F9: message-id=<[email protected]>
Nov 5 17:25:01 machineA postfix/qmgr[25623]: 2B0D8819F9: from=<[email protected]>, size=814, nrcpt=1 (queue active)
Nov 5 17:25:01 machineA postfix/local[13681]: 2B0D8819F9: to=<[email protected]>, orig_to=<cronusapp>, relay=local, delay=0.11, delays=0.07/0/0/0.04, dsn=2.0.0, status=sent (delivered to mailbox)
Nov 5 17:25:01 machineA postfix/qmgr[25623]: 2B0D8819F9: removed
我在这里做错了什么?为什么我的 crontab 不工作?如果我的参展商服务器因某种原因发生故障,我只需要自动重新启动即可。
答案1
java
在/usr/bin
目录中吗?默认情况下有crontab
一个最小值PATH
。您可能需要在 crontab 中 设置JAVA_HOME
和:PATH
*/5 * * * * JAVA_HOME=/opt/java/latest;export JAVA_HOME; \
PATH=$PATH:$JAVA_HOME/bin; \
pgrep -f exhibitor || nohup java \
-jar /pekooz/exhibitor-1.5.1/lib/exhibitor-1.5.1-jar-with-dependencies.jar \
-c file --fsconfigdir /opt/exhibitor/conf --hostname machineA > exhibitor.out