다음과 같은 크론 작업이 있다고 가정해 보겠습니다.
*/15 * * * * /path/to/thedaemon
데몬(파이썬 데몬임 from daemon import runner
)은 자체적으로 여러 인스턴스를 허용하지 않으며 이는 그 자체로 매우 좋습니다. 데몬이 이미 실행 중이면 시작을 시도하며 다음 결과가 나타납니다.
lockfile.LockTimeout: Timeout waiting to acquire lock for /tmp/thedaemon.pid
물론 cron 작업은 상관하지 않습니다. 주기적으로 명령을 계속 실행하여 실행 중이 아닌 경우 실행을 시작할 수 있습니다. 그러나 이것은 그다지 우아하지 않습니다.
더 우아하게 cron 작업을 설정하는 방법이 있습니까?시작하기 전에 데몬이 실행 중인지 알고 계십니까? 조건이 있으면 속기일까요?
즉, 데몬이 실행 중인지 확인하기 위해 cron 작업을 어떻게 설정합니까?
실행 중이라면 아무것도 하지 마세요. 실행 중이 아니면 시작하세요.
답변1
Python 데몬을 쉘 스크립트로 래핑할 수 있습니다. 처음 시작할 때 프로세스가 이미 실행 중인지 확인하세요.
pid=$(cat pid.file)
ps -ef | grep $pid | grep <command to start daemon>
if [[ $? -eq 0 ]]; then
echo "daemon already running" & exit 1
else
<command to start daemon> & \
echo $! > pid.file
fi