본문 바로가기
프로그래밍/리눅스

[shellscript] 중복 실행 방지 - Avoid redundant execution

by 앗싸붕 2021. 1. 13.
728x90
반응형

 

쉘스크립트를 작성하다보면 중복 실행에 의해 문제가 발생하는 경우가 종종 있습니다. 이런 경우를 방지하기 위해 간단한 중복 실행 방지 코드를 적용할 수 있습니다.

 

실행 예

하기 코드는 간단하게 1초에 한 번식 현재 시간을 출력하는 shellscript 입니다. Main function 에서 현재는 1초 sleep 후 현재 날짜를 수행하고 있습니다. 

 

 

 

중복으로 실행할 경우 하기와 같이 1초에 1번씩 실행되어야 할 것들이 여러 번 출력되는 것을 확인할 수 있습니다. 이렇게 중복해서 실행될 경우 예상하지 못했던 문제가 발생할 수 있기에 중복 실행 코드를 추가합니다.

 

 

 

중복 실행 방지 코드

중복 실행 방지 코드는 프로그램 실행 시 pid 번호를 특정 파일에 적어놓고 프로그램이 종료할 경우 해당 파일을 삭제합니다. 중복으로 실행될 경우에는 해당 파일에 적혀있는 pid 번호로 실행되고 있는 프로그램이 있으면 오류를 내도록 작성되었습니다.

#!/bin/bash
### 중복 방지 코드 (avoid overrap) 
LOCKFILE=./lock/$(basename $0)
if [ -f $LOCKFILE ];then
  P=$(cat $LOCKFILE)
  if [ -n "$(ps --no-headers -f $P)" ];then
    echo "already running... exit."
    exit 1
  fi
fi
echo $$ > $LOCKFILE
trap 'rm -f "$LOCKFILE"' EXIT #프로그램이 종료 될 경우 해당 파일 삭제

# Main function
while [ true ]
do
    sleep 1
    date
done

exit 0

 

 

 

 

중복 방지 코드 삽입 후에는 "already running... exit." 라는 메세지를 보여주며 중복으로 실행되지 않는 것을 확인할 수 있습니다.

 

 

728x90
반응형

댓글