逆引きシェルスクリプト/シェルスクリプトの二重起動(多重起動)を禁止する
をテンプレートにして作成
[
トップ
] [
新規
|
一覧
|
検索
|
最終更新
|
ヘルプ
]
開始行:
#navi(../)
* シェルスクリプトの二重起動(多重起動)を禁止する [#v812ea...
本記事はシェルスクリプトの二重起動(多重起動)を防止するた...
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 参考サイト [#l2352abc]
-[[シェルスクリプトの多重起動を防ぎたい!>http://d.hatena...
* 二重起動サンプルスクリプト [#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_ch...
[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 mu...
[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(../)
* シェルスクリプトの二重起動(多重起動)を禁止する [#v812ea...
本記事はシェルスクリプトの二重起動(多重起動)を防止するた...
#contents
#htmlinsertpcsp(linux_ads_top.html,linux-sp.html)
* 参考サイト [#l2352abc]
-[[シェルスクリプトの多重起動を防ぎたい!>http://d.hatena...
* 二重起動サンプルスクリプト [#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_ch...
[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 mu...
[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)
ページ名: