逆引きシェルスクリプト/シェルスクリプトの二重起動(多重起動)を禁止する
の編集
Top
/
逆引きシェルスクリプト
/
シェルスクリプトの二重起動(多重起動)を禁止する
[
トップ
] [
編集
|
差分
|
バックアップ
|
添付
|
リロード
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
-- 雛形とするページ --
(no template pages)
#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)
タイムスタンプを変更しない
#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)
テキスト整形のルールを表示する
添付ファイル:
multi_start_chk.sh
49件
[
詳細
]