シェルの2重起動を防止する方法
シェルの二重起動を防止するのにはどうしたら良いのか調べていて、pidofコマンドを使えば出来ること分かったので、備忘録として残しておく。
以下はサンプル。2重起動の動作確認をするため、わざとsleepさせてます。これを"./test.sh &"みたいにして呼び出して、もう一度"./test.sh"を呼び出せば正しく動いているか確認出来る。
#!/bin/bash PNUM=$(pidof -x $0) if [ "$(echo $PNUM | awk '{print NF}')" != "1" ]; then echo "2重起動です" exit 1 fi #30秒間スリープ sleep 30
以下は実行した結果。
junya@ubuntu:~$ ./test.sh & [1] 3159 junya@ubuntu:~$ ps PID TTY TIME CMD 2993 pts/2 00:00:00 bash 3159 pts/2 00:00:00 test.sh 3164 pts/2 00:00:00 sleep 3167 pts/2 00:00:00 ps junya@ubuntu:~$ ./test.sh 2重起動です junya@ubuntu:~$ echo $? 1 junya@ubuntu:~$ ./test.sh 2重起動です junya@ubuntu:~$ echo $? 1 junya@ubuntu:~$ ps PID TTY TIME CMD 2993 pts/2 00:00:00 bash 3159 pts/2 00:00:00 test.sh 3164 pts/2 00:00:00 sleep 3179 pts/2 00:00:00 ps