ラジコの録音、東京の放送を取得する一案(7 サーバーを常時起動させるには

これで万事解決と思いたいですが、
サーバーが起動していないと、このスクリプトは動作しないです。
通常はバックグラウンドで起動させればずっと動いているはずです。
が、さくらインターネットのベーシックプランでは、あまり長い間プロセスが動いているとkillされてしまいます。
~一度暴走させて、「すべてのスクリプトを止めた」というメールが来てひやりとしました^^;~

また、長時間起動しっぱなしの時、プロセスは残っているのに返答がない、という状況が起きました。
それほどのリソースを食うスクリプトではないですが、何か対策は必要です。

起動スクリプト

こんな感じで作ってみました。

#!/bin/sh
export PATH=/home/xxxx/perl5/bin:/home/xxxx/local/bin:$PATH

# server running check.
ST=`ps ax|grep server|grep -v grep`
# running...0 stop...1
RUN=$?

#PID
PID=`echo $ST| cut -d ' ' -f1`

Msg(){
    echo `date '+%Y/%m/%d %H:%M:%S'`	$1
}

if [ $# -eq 0 ];then
    # Status
    if [ $RUN -eq 0 ] ;then
        Msg "running.($PID)"
    else
        Msg "stop." 
    fi
    #
else
    if [ $1 = "start" ] ;then
        Msg "to start." 
        if [ $RUN -eq 0 ] ;then
            Msg "already running.($PID)"
        else
            ./server_token.pl &
        fi
        
    elif [ $1 = "stop" ] ;then
        Msg "to stop." 
        if [ $RUN -eq 0 ] ;then
            kill $PID
        else
            Msg "already stop.($PID)"
        fi
    elif [ $1 = "restart" ] ;then
        Msg "restart." 
        if [ $RUN -eq 0 ] ;then
            kill $PID
            Msg "stop."
            sleep 1
            ./server_token.pl &
        else
            Msg "already stop.($PID)"
            ./server_token.pl &
        fi
    else
        echo "usage : $0 [start|stop|restart]"
    fi
fi

まずexportコマンドでユーザーディレクトリにモジュールをインストールしてあるパスを設定します。

サーバーが起動しているかどうかは、psコマンドでserverという文字列があるかどうかで確認しています。
もちろんserverという名前を含む別プロセスがあると誤作動します。ここは注意が必要です。

引数が0の場合にはstatusとなります。PIDか停止しているかを表示して終わります。

あとはstart、stop、resutartに応じて動作します。
起動するときには
./server_token.pl &
のようにしてバックグラウンド起動しています。

restartは録音を失敗したくない番組の5分前に実行しています。

startは落ちている場合に起動する、という動作になっているので、5分おきに起動しています。

どちらもcrontabにて設定をしてあります。