저는 Python으로 작성된 프로그램을 가지고 있습니다. 제 프로그램은 매분 일부 금융 웹사이트에서 값을 긁어와 그 값을 내 데이터베이스에 푸시합니다. 내 프로그램은 작업을 수행하는 데 약 1초 또는 최대 1.5초가 걸립니다. 매분 내 프로그램을 호출하기 위해 cron 작업을 설정했습니다. 매일 오전 9시부터 오후 4시까지 이런 방식으로 프로그램을 실행해야 합니다. 이제 때로는 오전 9시에서 오후 4시 사이에 언제든지 프로그램을 중지하여 프로그램을 종료해야 할 수도 있습니다. 어떻게 해야 하나요?
~에 따르면이 링크
시도했지만 ps -o pid,sess,cmd afx | grep -A20 "cron$"
몇 초 만에 작업이 완료되었기 때문에 목록에서 내 프로그램을 찾을 수 없었습니다.
인용하다이것나는 그것을 시도했고 /etc/init.d/cron stop
이것은 pkill cron
내가 원하지 않는 모든 크론 작업을 죽였습니다. 저는 Ubuntu Linux에서 이 크론을 실행하고 있습니다.
답변1
일반적으로 시스템 cron
데몬을 중지하고 시작하는 것은 좋지 않은 생각입니다. 해당 행을 주석 처리하는 것이 항상 편리한 것은 아니므로 여기에 몇 가지 관련 대안이 있습니다.
세마포어 사용
이 요구 사항에 대한 한 가지 해결책은 세마포어(또는 플래그)를 사용하여 스크립트 실행이 허용되는지 여부를 나타내는 것입니다. 이 경우 세마포어는 파일의 존재로 신호를 받을 수 있습니다. 파일이 존재하면 스크립트가 실행되지 않고, 그렇지 않으면 실행됩니다. (물론 파일이 존재할 때만 스크립트가 실행되도록 테스트를 반대로 할 수도 있습니다.)
cron
다음은 세마포어 검사가 포함된 항목의 예 입니다 .
* * * * * test ! -f /tmp/stop && /path/to/script...
스크립트 실행을 중지하려면 을 실행하면 됩니다 touch /tmp/stop
. 다시 실행하려면 rm /tmp/stop
.
테스트를 되돌리려면 파일에서 다음 테스트를 사용하세요 /tmp/run
.
* * * * * test -f /tmp/run && /path/to/script...
권한이 있는 사람만 스크립트를 중지(또는 시작) 상태로 표시할 수 있도록 실제로는 다른 세마포어 파일을 사용할 수 있습니다. 한 가지 옵션은 "$HOME"/.scriptname.stop
이라는 스크립트를 사용하는 것입니다 scriptname
.
코드 실행 방지
스크립트가 실행 가능하고 호출된 경우 /path/to/script...
실행 권한을 제거하거나 다른 곳으로 이동하여 스크립트 실행을 중지하세요.
chmod a-x /path/to/script
또는
mv /path/to/script{,.stop} # i.e. mv /path/to/script /path/to/script.stop
cron
이는 코드를 실행하려고 할 때마다 빌드 오류가 발생하는 빠르고 보기 흉한 수정입니다 . 일반적으로 이러한 오류는 포착되어 cron
작업 소유자에게 이메일로 전송되므로 스크립트를 실행하기 전에 몇 가지 테스트를 수행하면 이 오류가 표시되는 것을 방지할 수 있습니다.
* * * * * test -x /path/to/script && /path/to/script...
답변2
cron 데몬은 시스템에 필요한 많은 작업을 수행하므로 종료하지 마십시오. 대신 crontab 파일을 편집하고 스크립트와 관련된 cron 작업을 주석 처리하세요. (참고로 편집 후 cron 데몬을 다시 시작할 필요는 없습니다.)
답변3
제가 생각할 수 있는 가장 쉬운 방법은 crontab을 편집하고 cronjob을 주석 처리하는 것입니다.
크론탭을 엽니다:
crontab -e
#
cronjob 라인을 주석 처리하십시오 .
답변4
Python 프로그램을 편집하고 먼저 "실행하지 않음" 파일을 확인하도록 하십시오. 그러한 파일이 있으면 프로그램을 종료하십시오.
import os.path
if os.path.isfile('/tmp/disable_mypython'): exit()
예를 들어, 이름이 지정된 파일을 검사하는 경우 /tmp/disable_mypython
다음 명령을 사용하여 프로그램을 쉽게 "비활성화"할 수 있습니다.
touch /tmp/disable_mypython
다음을 사용하여 다시 활성화하십시오.
rm /tmp/disable_mypython