2017-02-19 10 views
0

私はWebサーバーが稼動しているかどうかをチェックし、稼働していないかどうかをチェックする単純なスクリプトを持っています。私はこのスクリプトをrc1.dに入れて、私のウェブサーバは決して走りを止めません。 Webサーバーの再起動を停止したい場合は、このスクリプトを終了する必要があります。 質問:親スクリプトを変更するにはどうしたらよいですか?Webサーバーが短時間手動で再起動するのを止めることができますか? 特定のディストリビューションに関する回答を投稿しないでください。ここ は私のスクリプトです:永続的なプロセスの一時停止デーモンを殺すことなく

#!/bin/sh 

if [ "$1" = "stop" ] ; then 
    echo "Stoping lighttpd..." 
    killall lighttpd 
    PID=`pidof lighttpd` 
    if [ "$PID" != "" ] ; then 
     kill -9 $PID 
    fi 
    exit; 
fi 

PID=`pidof lighttpd` 
if [ "$PID" == "" ] ; then 
    echo "Starting lighttpd..." 
    nohup lighttpd >/dev/null 2>/dev/null & 
fi 

PID=`pidof lighttpd` 

while [ "1" == "1" ] 
do 
    PID=`pidof lighttpd` 
    sleep 3 
    if [ "$PID" == "" ] ; then 
     echo "Restarting lighttpd..." 
     nohup lighttpd >/dev/null 2>/dev/null & 
     sleep 2 
    fi 
done 

は、このスクリプトを殺すことなく、私はlighttpdのを止めることができるでしょうので、私は、それを変更することができます任意の方法はありますか?

+2

は多分継続する 'SIGCONT'それを送った後、お使いのモニタ・プロセス' SIGSTOP'を送信し、あなたが何をしたいですか? –

答えて

1

これに使用される解決策の1つは、アクションを起こさないようにスクリプトに通知するフラグとして機能する一時ファイルを持つことです。

あなたの監視スクリプトは次のようになります。

#!/bin/bash 

if [ "$1" = "stop" ] ; then 
    echo "Stoping lighttpd..." 
    killall lighttpd 
    PID=$(pidof lighttpd) 
    if [ "$PID" != "" ] ; then 
     kill -9 $PID 
    fi 
    exit; 
fi 

MSG="Starting lighttpd..." 
while [ true ]; do 
    PID=$(pidof lighttpd) 
    if [ -z "$PID" -a ! -f /var/run/.pause_monitor_lighttpd ] ; then 
     echo "$MSG" 
     nohup lighttpd >/dev/null 2>/dev/null & 
    fi 
    MSG="Restarting lighttpd..." 
    sleep 3 
done 

を次に、監視を一時停止するには、あなたが希望:

touch /var/run/.pause_monitor_lighttpd 

と一時停止を解除するには、監視:

rm -f /var/run/.pause_monitor_lighttpd 

マークがコメントしたよう上記の代わりに、SIGSTOPSIGCONTを使用することですあなたのスクリプトを一時的に停止させるシグナル。ただし、スクリプトが他のメカニズムによって再起動された場合は、すぐに起動してWebサーバーを再起動します。その後、

pkill -STOP -f '/bin/bash .*/monitor_lighttpd.sh' 

と、それを一時停止を解除する:あなたが監視を一時停止するためにこれを使用することになり、あなたのスクリプトがmonitor_lighttpd.shと呼ばれていると仮定すると、

pkill -CONT -f '/bin/bash .*/monitor_lighttpd.sh' 

一般的なヒント:

  • 使用$(command)の代わり`command`
  • 条件(PID=...)の検出と可能であれば、状況の変化の可能性がより高くなります(if [ $PID...)。デーモンのinitスクリプトを手動で開始/停止する代わりに使用してください(例:if [ $PID...)。代わりにkillall lighttpd/etc/init.d/lighttpd stop(正確な使用方法は、お使いのシステムによって異なります)
関連する問題