-
스크립트 중복 실행 방지알고리즘과 언어/shell(bash) 2022. 6. 20. 20:24
a.sh 에서 b.sh의 스크립트 중복 실행을 방지하기 위해서는 ps -ef | grep b.sh | grep -v | wc -l 값이 1 이상인지를 통해서
b.sh 가 실행되고 있는지를 확인하면 되겠지만
a.sh에서 a.sh 스스로가 중복실행되는지를 체크하기 위해서는 위와 같은 방법으로 확인하기 어렵다.
1. a.sh 스크립트에서 동명의 a.sh가 실행되는지를 확인하기 위해서 ps -ef를 한다면, 본인도 세어지기 때문에 0인지 아닌지로 체크할 수 없음.
2. 실제로 선행되는 a.sh가 없는 경우에 ps -ef를 통해 기준을 잡으려고 했지만, 1이 나올 것이라는 기대와 달리 3이 나왔음. (2였으면 ps -ef가 실행되는 커맨드의 자식 프로세스까지 세어졌다고 생각할 수 있겠지만, 3이 나오는 경우도 존재했고, 인터넷을 통해 해답을 찾기 어려웠다.)
결론적으로는 lock파일을 만들어서, a.sh가 실행된다면 락파일을 생성하고 자신의 pid를 적은 후 쉘 스크립트의 내용이 진행되도록 하고 ,
쉘이 끝날 때 lcok파일을 지워서 다른 파일이 허용 가능하게 만들었다.
만일 a.sh가 실행중엔데 a.sh를 실행한다면 이미 락파일이 존재하기 때문에 종료된다.
# PATH는 락파일을 둘 경로. alias 할 수 있기에 되도록 절대경로를 적자 LOCKFILE=$PATH/lockfile # 락파일이 존재한다면 if [ -f $LOCKFILE ];then # 안의 내용(PID) 확인 P=`cat $LOCKFILE` # PID가 존재한다면 이미 동명의 스크립트가 존재하므로 exit if [ -n "`ps --no-headers -f $P`" ];then echo "already running " exit 1 fi fi # PID를 락파일에 쓴다. (+ 락파일 생성) echo $$ > $LOCKFILE # 쉘 스크립트가 꺼질 때, 락파일을 삭제해라 trap "rm -f $LOCKFILE" EXIT # 실제 코드 # main code .....
'알고리즘과 언어 > shell(bash)' 카테고리의 다른 글
bash while문 안에서 횟수 제한하는 법 (0) 2022.06.13 bash 관련 사이트 (0) 2022.06.13 linux 디렉토리 생성 중복/중첩 관련 (mkdir -p) (0) 2022.06.06 shell script 내에 nohup 사용 (0) 2022.06.03 tail -f 보다 효율적인 less +F (0) 2022.06.02