以下のスクリプトは正しいですか? ? ?昨日まではすべて大丈夫でした!
cronジョブが1分ごとに実行されるのを助け、他のスクリプトを呼び出すために次のスクリプトを作成しました。これにより、コマンドが複数回実行される可能性があり、予想される動作は4つの作業プロセスを持ち、それより少ないかそれ以上の場合に再起動が発生します。 、次のスクリプトが正しいことを教えてください。
#! /bin/bash
case "$(pidof command | wc -w)" in
0) echo "Restarting command: $(date)" >> log
/usr/bin/sh x.sh
;;
4) # all ok
echo "All OK" >> log
;;
*) for pid in $(ps -ef | grep "x" | grep "y" | awk '{print $2}'); do kill -9 $pid; done
echo "Removed PIDs and RESTARTING FFMPEG: $(date)" >> /root/afarinEidSTs/log
/usr/bin/sh x.sh
;;
esac
4つ以上のプロセスがあってもプロセスは終了しません。なぜですか?
ログファイルには"Restarting command: $(date)"
。
pidofは23を表示するのでこれは奇妙ですffmpeg | wc -w
が、スクリプトはそれらをすべて殺して再起動しません!
([0-3])
@jordanmが言ったように、代わりに試してみましたが、0)
役に立ちませんでした。
答え1
これは、ジョブの完了に使用するクローンや他のエントリが使用したすべてのコマンドを実行できないためです。この問題を解決するにはwhich pidof
、which grep
&cを使用して取得したすべてのコマンドの絶対パスを使用することをお勧めします。
#!/bin/bash
case "$(/usr/sbin/pidof command | /usr/sbin/wc -w)" in
0) echo "Restarting command: $(date)" >> log
/usr/bin/sh x.sh
;;
4) # all ok
echo "All OK" >> log
;;
*) for pid in $(/usr/sbin/ps -ef | /usr/sbin/grep "x" | /usr/sbin/grep "y" | /usr/sbin/awk '{print $2}'); do kill -9 $pid; done
echo "Removed PIDs and RESTARTING FFMPEG: $(date)" >> /root/afarinEidSTs/log
/usr/bin/sh x.sh
;;
esac
システムのフルパスを再確認してください。