#navi(../)
* シェルスクリプトの二重起動(多重起動)を禁止する [#v812eafc]
本記事はシェルスクリプトの二重起動(多重起動)を防止するためのサンプルスクリプトを記しています。

#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)

* 参考サイト [#l2352abc]
-[[シェルスクリプトの多重起動を防ぎたい!>http://d.hatena.ne.jp/uunfo/20090603/1244020700]]

* 二重起動サンプルスクリプト [#f1a6f461]
#ref(multi_start_chk.sh)
 01: #!/bin/bash
 02: 
 03: if [ $$ != `pgrep -fo $0`  ]; then
 04:   echo `basename $0` is already running.
 05:   exit 1
 06: fi
 07: 
 08: # Script Body
 09: for i in `seq 1 5`
 10: do
 11:   echo "Hello PID=$$"
 12:   sleep 1
 13: done

二重起動(多重起動)を防止しているのは3行目〜6行目になります。~
pgrepの値と$$が同じであれば、初めての起動になります。~
pgrepの値と$$が異なるのであれば、既に同一のシェルスクリプトが動作してる事になります。

** サンプルスクリプトの実行結果 [#fa67aff9]
上記のサンプルスクリプトを起動してみました。~
以下のようになります。
 sakura@ubuntu:~$ ./multi_start_chk.sh & ./multi_start_chk.sh 
 [1] 1621
 Hello PID=1621
 multi_start_chk.sh is already running.
 sakura@ubuntu:~$ Hello PID=1621
 Hello PID=1621
 Hello PID=1621
 Hello PID=1621
 
 [1]+  終了                  ./multi_start_chk.sh

bash -x にて実行した場合は以下の出力でした。~
PIDによる比較がされているのが確認できます。~
bash -xについては以下の記事を参考にしてください。
-[[シェルスクリプトのデバッグ方法>逆引きシェルスクリプト/シェルスクリプトのデバッグ方法]]
 sakura@ubuntu:~$ bash -x multi_start_chk.sh & bash -x multi_start_chk.sh 
 [1] 1666
 ++ pgrep -fo multi_start_chk.sh
 ++ pgrep -fo multi_start_chk.sh
 + '[' 1666 '!=' 1666 ']'
 + '[' 1667 '!=' 1666 ']'
 ++ seq 1 5
 ++ basename multi_start_chk.sh
 + for i in '`seq 1 5`'
 + echo 'Hello PID=1666'
 Hello PID=1666
 + sleep 1
 + echo multi_start_chk.sh is already running.
 multi_start_chk.sh is already running.
 + exit 1
 sakura@ubuntu:~$ + for i in '`seq 1 5`'
 + echo 'Hello PID=1666'
 Hello PID=1666
 + sleep 1
 + for i in '`seq 1 5`'
 + echo 'Hello PID=1666'
 Hello PID=1666
 + sleep 1
 + for i in '`seq 1 5`'
 + echo 'Hello PID=1666'
 Hello PID=1666
 + sleep 1
 + for i in '`seq 1 5`'
 + echo 'Hello PID=1666'
 Hello PID=1666
 + sleep 1
 
 [1]+  終了                  bash -x multi_start_chk.sh

*関連資料 [#ce6ea492]
-[[シェルスクリプトのデバッグ方法>逆引きシェルスクリプト/シェルスクリプトのデバッグ方法]]
#br
#htmlinsertpcsp(linux_ads_btm.html,linux-sp.html)

トップ   編集 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 検索 最終更新   ヘルプ   最終更新のRSS