多重起動を防ぐシェルスクリプト

cron等でシェルを複数回実行した時、多重起動するとまずいので、それを回避するスクリプト。
業務上必要だったので作ってみた。

#!/bin/sh

SCRIPT_PID="/home/takase/work/run_script.pid"
if [ -f $SCRIPT_PID ]; then
  PID=`cat $SCRIPT_PID `
  if (ps -e | awk '{print $1}' | grep $PID >/dev/null); then
    exit
  fi
fi

echo $$ > $SCRIPT_PID

(この辺にバッチの処理)

rm $SCRIPT_PID

pidでプロセスの有無を確認しているので起動中は2重に実行されないし、
何か理由があって落ちてた場合は再実行される。

後はcrontabにこのシェルを設定してやればOK