Cronジョブが実行されない(pgrepの問題)

Cronジョブが実行されない(pgrepの問題)

bashシェルスクリプトを起動するcronジョブを毎分実行します。

# Automatically reboot the server if it goes down
* * * * * /root/auto-restart.sh

スクリプトは手動で実行できますが、クローンジョブを介して実行しようとすると実行されません。少しデバッグした結果、次のコマンドが原因であることがわかりました。

pgrep -fcl auto-restart.sh

完全に手動で実行すると、コマンドは正しい値を返し、auto-restart.shはスクリプトが現在実行されている場合にのみリストされます。

ただし、cronジョブが開始されると、次の出力が表示されますpgrep -fl auto-restart.sh(実行時)。

3110 sh
3111 auto-restart.sh

これは私が使用するコードです:

scriptcheck=`pgrep -fcl auto-restart.sh`
if [ $scriptcheck -gt 1 ]; then
    echo "auto-restart.sh script already in use. Terminating.."
    #cron job debugging..
    echo "[DEBUG] scriptcheck returning greater than 1" > /tmp/debug.output
    echo "[DEBUG] Value of scriptcheck: ${scriptcheck}" >> /tmp/debug.output
    echo "[DEBUG] contents:" >> /tmp/debug.output
    pgrep -fl auto-restart.sh >> /tmp/debug.output
    exit
fi

完全なスクリプトはここにあります:https://pastebin.com/bDyzxFXq

答え1

cron実行すると、次のように実行されます/root/auto-restart.sh。オプションを使用したため、実行中のプロセスのコマンドラインはどこでも一致するため、一致します。後者はの出力で正常に表示されます。shsh -c /root/auto-restart.sh-fpgreppgrepauto-restart.shauto-restart.shsh -c /root/auto-restart.shshpgrep -l

pgrep -c auto-restart.sh

あなたが望む行動を与えるでしょう。 (-l言わないから諦めました-c。)

(あなたのサーバーに監視タイマー、これはより適切かもしれません。サーバーがcronジョブを実行するのに十分に実行されていますが、他の方法ではダウンしていると見なされると、監視装置は機能しないと想像しています。 )

関連情報