![웹팩션에서 이미 실행 중인 프로세스를 확인하시겠습니까?](https://linux55.com/image/16914/%EC%9B%B9%ED%8C%A9%EC%85%98%EC%97%90%EC%84%9C%20%EC%9D%B4%EB%AF%B8%20%EC%8B%A4%ED%96%89%20%EC%A4%91%EC%9D%B8%20%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EB%A5%BC%20%ED%99%95%EC%9D%B8%ED%95%98%EC%8B%9C%EA%B2%A0%EC%8A%B5%EB%8B%88%EA%B9%8C%3F.png)
나는 webfaction에서 Django 프레임워크를 사용하고 있으며 5개의 다른 cron 작업을 가지고 있습니다. 하나는 다른 것보다 훨씬 오래 지속되며 때로는 멈추기도 합니다(30-120초 이상).
1분마다 실행되도록 크론 작업을 설정했지만 완료되지 않으면 /home/aemdy/webapps/hvan/myproject/myfile.py
다른 프로세스가 시작되어 메모리 사용량이 많아지고 사이트 속도가 느려지며 아파치 충돌이나 메모리 누수가 발생합니다.
으로 설정하고 싶지는 않지만 */3 * * * *
다음과 같은 것을 원합니다.
if this process in process list:
pass
else:
run process
이것이 가능합니까?
답변1
이를 수행하는 전통적인 방법은 /var/run
시작 시 스크립트를 검사하여 파일이 존재하는지 확인하고, 존재하지 않는 경우 자체 PID를 포함하는 파일을 생성하는 것입니다. 완료되면 스크립트가 파일을 삭제합니다. 파일이 존재하면 스크립트가 직접 종료됩니다. 이렇게 하면 스크립트가 아무리 자주 호출되더라도 아직 실행되지 않은 기본 코드만 실행됩니다.
이 접근 방식의 문제점은 비정상 종료로 인해 파일이 시스템에 남아 있다는 것입니다. 따라서 지정된 PID가 존재하는지, 해당 PID가 올바른 스크립트에 대한 것인지 확인하는 검사를 통해 강화되는 경우가 많습니다.
이 방법을 사용하려면 단순히 항목을 수정하는 것이 아니라 스크립트를 변경해야 crontab
하지만 이와 같은 문제를 해결하기 위한 유서 깊은 메커니즘입니다.