2014年2月17日月曜日

第20回「2重起動チェックをする」

Cronで処理完了していないのに、またCronが実行して、2重起動しないようにしてください。。
さて、第20回のお題は「2重起動チェックをする」です。

2重起動チェックはfuserコマンド(使用しているプロセス表示)と、awkのNF(フィールド数表示)を利用します。

[check.sh]
#!/bin/sh
fuser a.sh 2>/dev/null | awk '{ exit NF }'
if [ $? -gt 1 ] ; then
echo '複数起動中…'
exit
fi
sleep 1000

check.shを起動中にcheck.shを起動すると、
exit NFが終了ステータス($?)になり、2(プロセス数)となります。(1つ起動していれば、1になる)
[ $? -gt 1 ]は、$?が1より大きいときに、
echo '複数起動中…'
になります。(1つ起動したときは、echoされない。2つ以上でechoされる。)
2>/dev/nullの標準エラーは、awkのNF(フィールド数表示)にカウントさせないようにしています。

0 件のコメント: