ラジコの録音、東京の放送を取得する一案(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にて設定をしてあります。
ディスカッション
コメント一覧
まだ、コメントがありません