メモ:pidによる簡易的なシェルスクリプト実行制御
#!/bin/sh
:
: このスクリプトのpidファイルの場所を定義する。
: basenameコマンドにより絶対パス記述時ディレクトリ部分を除去。相対パス記述時は影響なし。
: 同様のことは${0##*/}でも可能
pidfile="/var/run/`basename${0%.*}`.pid"
: process-id[EOF]
:
: process-idは1-65535までのプロセスIDを示す。
:
: pidファイルがあるかないかで制御を分ける。
: pidファイルがあれば、記述中のプロセスIDについて、${0}と同一コマンドのプロセスか確認する。
if [ -e ${pidfile} ]
then
:
: ${pidfile}がある場合、${pidfile}からプロセスIDの情報を抽出する。
run_pid=`cat ${pidfile}`
:
: すでに走っていると思われるこのスクリプトのPID : ${run_pid}
:
: psコマンドを使用して、このスクリプトの名前:${0}を含むプロセスをすべて抽出し、${run_pid}と比較する。
for chk_pid in `ps axww | grep ${0##*/} | awk '{print $1,$5}' | grep -v grep | cut -f1
-d' '`
do
if [ "o${chk_pid}" = "o${run_pid}" ]
then
:
: ${run_pid}と${chk_pid}が一致する場合は、このスクリプトの実行を停止する
echo "stopped."
:
: スクリプトを終了する
exit
fi
done
:
: 上記のループで${run_pid}と${chk_pid}がすべて一致しなかった場合、pidファイルの削除漏れが考えられるので、${pidfile}を削除する。
rm ${pidfile}
else
:
: pidファイルがそもそも存在しない場合は、特に何もしない。
fi
:
: このスクリプトのpid:${$}を${pidfile}に格納する。 ※改行コードは含まないようにする。
echo -n ${$} > ${pidfile}
: この後に実行するスクリプトを書いていく・・・
:
:
:
:
:実行終了したら、pidファイルは削除する。
rm ${pidfile}
: この記事はここで終わり。
:
: このスクリプトのpidファイルの場所を定義する。
: basenameコマンドにより絶対パス記述時ディレクトリ部分を除去。相対パス記述時は影響なし。
: 同様のことは${0##*/}でも可能
pidfile="/var/run/`basename${0%.*}`.pid"
:
: pidファイルは下記のようなプロセスIDの文字列長最大5文字の改行コードを含まないテキストファイルとする。
: # cat ${pidfile}: process-id[EOF]
:
: process-idは1-65535までのプロセスIDを示す。
:
: pidファイルがあるかないかで制御を分ける。
: pidファイルがあれば、記述中のプロセスIDについて、${0}と同一コマンドのプロセスか確認する。
if [ -e ${pidfile} ]
then
:
: ${pidfile}がある場合、${pidfile}からプロセスIDの情報を抽出する。
run_pid=`cat ${pidfile}`
:
: すでに走っていると思われるこのスクリプトのPID : ${run_pid}
:
: psコマンドを使用して、このスクリプトの名前:${0}を含むプロセスをすべて抽出し、${run_pid}と比較する。
for chk_pid in `ps axww | grep ${0##*/} | awk '{print $1,$5}' | grep -v grep | cut -f1
-d' '`
do
if [ "o${chk_pid}" = "o${run_pid}" ]
then
:
: ${run_pid}と${chk_pid}が一致する場合は、このスクリプトの実行を停止する
echo "stopped."
:
: スクリプトを終了する
exit
fi
done
:
: 上記のループで${run_pid}と${chk_pid}がすべて一致しなかった場合、pidファイルの削除漏れが考えられるので、${pidfile}を削除する。
rm ${pidfile}
else
:
: pidファイルがそもそも存在しない場合は、特に何もしない。
fi
:
: このスクリプトのpid:${$}を${pidfile}に格納する。 ※改行コードは含まないようにする。
echo -n ${$} > ${pidfile}
: この後に実行するスクリプトを書いていく・・・
:
:
:
:
:実行終了したら、pidファイルは削除する。
rm ${pidfile}
: この記事はここで終わり。
コメント
コメントを投稿