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
반응형
'프로그래밍 > 리눅스' 카테고리의 다른 글
[linux/리눅스] 패킷 캡쳐를 위한 tcpdump 사용 예제 (옵션 사용법) (1) | 2022.09.28 |
---|---|
[linux] crond, crontab 사용법 (7) | 2021.01.17 |
[shellscript] error: garbage option 오류 (0) | 2021.01.13 |
[shellscript] 실행 옵션 - getopt (1) | 2021.01.08 |
[svn 오류] svn: E155009: Failed to run the WC DB work queue associated with (3) | 2021.01.05 |
댓글