如果服务器出现故障,如何使用 crontab 自动重新启动服务器?

如果服务器出现故障,如何使用 crontab 自动重新启动服务器?

我有一个 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 -

  1. 通过运行创建了一个新的 crontab crontab -e
  2. 将这一行添加到刚刚打开的文件中

    */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
    
  3. 保存文件并退出编辑器。

因此,为了测试目的以查看我的 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

相关内容