私はあなたのスクリプトを私の状況 Jotne に採用しました。
#! /bin/bash
logfile="/var/oscamlog/oscam1check.log"
case "$(pidof oscam1 | wc -w)" in
0) echo "oscam1 not running, restarting oscam1: $(date)" >> $logfile
/usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1 &
;;
2) echo "oscam1 running, all OK: $(date)" >> $logfile
;;
*) echo "multiple instances of oscam1 running. Stopping & restarting oscam1: $(date)" >> $logfile
kill $(pidof oscam1 | awk '{print $1}')
;;
esac
テスト中に問題が発生しました.次の行で oscam1 の 3 つの追加プロセスを開始しました:/usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1
これにより、oscam1 の 8 つのプロセスが残りました。問題はこれです..スクリプトを実行すると、一度に 2 つのプロセスしか強制終了されないため、2 つのプロセスにするには 3 回実行する必要があります..
killall -9 oscam1
以外 続いて /usr/local/bin/oscam1 -b -c /usr/local/etc/oscam1 -t /usr/local/tmp.oscam1
、*)
元のプロセスとは別に、killall するより良い方法はありますか?では、ダウンタイムはゼロになるのでしょうか?
<ブロック引用>
システム上のプロセスが実行されているかどうかを監視するプログラム。
スクリプトは crontab
に格納されます 毎分実行されます。
これは、プロセスが実行されていないか、プロセスが複数回実行されている場合に機能します:
#! /bin/bash
case "$(pidof amadeus.x86 | wc -w)" in
0) echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt
/etc/amadeus/amadeus.x86 &
;;
1) # all ok
;;
*) echo "Removed double Amadeus: $(date)" >> /var/log/amadeus.txt
kill $(pidof amadeus.x86 | awk '{print $1}')
;;
esac
0
プロセスが見つからない場合は、再起動します。
1
プロセスが見つかった場合は、すべて問題ありません。
*
2 つ以上のプロセスが実行されている場合は、最後のプロセスを強制終了します。
よりシンプルなバージョン。これは、プロセスが実行されているかどうかをテストし、そうでない場合は再起動します。
終了フラグ $?
をテストするだけです pidof
から プログラム。 0
になります のプロセスが実行中で、1
#!/bin/bash
pidof amadeus.x86 >/dev/null
if [[ $? -ne 0 ]] ; then
echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt
/etc/amadeus/amadeus.x86 &
fi
そして最後に一言
pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &
これを crontab で使用して、次のように毎分実行できます:
* * * * * pidof amadeus.x86 >/dev/null ; [[ $? -ne 0 ]] && echo "Restarting Amadeus: $(date)" >> /var/log/amadeus.txt && /etc/amadeus/amadeus.x86 &
cccamオスカム
@Jotne ソリューションを採用し、完璧に動作します!たとえば、NAS の mongodb サーバーの場合
#! /bin/bash
case "$(pidof mongod | wc -w)" in
0) echo "Restarting mongod:"
mongod --config mongodb.conf
;;
1) echo "mongod already running"
;;
esac