사용자 cron 작업에 킬 (kill) 또는 켜기 / 끄기 스위치를 설치하기위한 기존 패턴이 있습니까? 예약하는 빌드를 길게했지만 때로는 표준이 아닌 시간대에

우리는 일반적으로 cron 작업을 예약하는 빌드를 길게했지만 때로는 표준이 아닌 시간대에 빌드를 다시 실행해야하며 그 당시에 실행하기에 안전한 cron 작업과 충돌 할 수 있습니다.

빌드 및 크론 작업을 모두 실행하는 여러 계정이 있으므로 전체 머신에 대한 크론 탭 서비스를 일시 중단했다가 나중에 다시 시작할 수 없습니다.

누구든지 패턴이나 구현이 있는지 궁금합니다. 나는 이것이 작동하는 것을 상상한다.

사용자는 파일을 생성합니다. ~ / block-crontab
user runs build cron 작업은 사용자의 홈 디렉토리에서 해당 파일을 찾고 파일이 있으면 모든 cron 작업을 건너 뜁니다. 그렇지 않으면 작업을 실행 한 다음 빌드가 완료되면 ~ / block-crontab을 제거합니다.

작동할까요? 어떻게 든 cron 스크립트를 수정해야한다고 생각합니다. 이 문제에 대한 더 나은 / 표준 접근 방식이 있는지 궁금합니다.

감사.



답변

crond나는 엉망이 아닌 빌드 스크립트 내부에 (단순한) 잠금 형식을 구현할 것을 강력히 권장합니다. 예를 들어, /var/run/스크립트에서 무언가를 발견하면 다른 프로세스가 프로젝트를 빌드하는 것보다 파일을 터치하여 확인하십시오 . 완료되면 잠금 파일을 제거해야합니다.

주석에 @GnP가 언급했듯이 flock유틸리티를 사용하여 잠금 파일을 반자동으로 관리 할 수도 있습니다 .

잠금 메커니즘을 사용하지 않거나 신뢰할 수없는 경우 a service crond stop를 실행하여 crond시스템 을 종료하십시오 .


답변

나는 오랫동안 실행중인 모든 명령을 화면에 포장하고 이미 실행중인 명령 cron이없는 경우에만 화면을 시작하는 경향이 있습니다 .

따라서 다음 줄은 crontab

*/2 * * * *  /bin/bash /path/to/LongRunningScript.bash

… 다음과 같이 변합니다.

*/2 * * * *  /usr/bin/screen -S MyUniqueName -Q select . || /usr/bin/screen -dmS MyUniqueName /bin/bash /path/to/LongRunningScript.bash

나는 또한 실행중인 스크립트에 첨부하고 출력 / 상태를 확인할 수있는 기회를 제공하기 때문에 이것을 좋아합니다.

시나리오에서 cron빌드를 실행하기 전에 다른 화면을 확인할 수 있습니다 ( 예 :

0 3 * * *  /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS AutomatedBuild /bin/bash /path/to/BuildScripts.bash
10 3 * * *  /usr/bin/screen -S ManualBuild -Q select . || /usr/bin/screen -dmS OtherAutomatedBuild /bin/bash /path/to/OtherBuildScripts.bash

수동 빌드 screen를 실행할 때 스크립트를 실행하기 전에 첫 번째 로 홉 하십시오 (연결 / 연결 끊기 방법에 대한 힌트가 필요하면 의견을 보내주십시오 screen. 유용한 유틸리티입니다. 아직 사용하지 않은 경우 샷을 제공하십시오)

을 입력하고 screen -S ManualBuild, [enter]원하는 명령을 치고 실행하십시오.

참고 : 제공된대로 예제를 사용하면 cron이름이 “ManualBuild”인 스크린 세션이 둘 이상 있으면 혼동 될 수 있습니다.