QuartzScheduler에는 CST/BST/ 또는 모든 시간대에서 실행한다고 말할 수 있는 기능이 있습니다. 이는 특정 시간대에서 특정 작업을 수행하고 다른 시간대에서 특정 작업을 수행하려는 경우에도 좋습니다.
시간대가 변경되면 사람들이 미쳐가고 시간을 변경해야 하는 crontab의 작업 목록을 거쳐야 하기 때문에 시간대를 지정할 수 있는 crontab과 유사한 기능이 있습니까?
I am looking for something where we can execute certain jobs in certain timezones and certain other jobs in some other timezones.
답변1
배포판에 따라 다릅니다. Cron의 일부 버전은 이를 지원하지만 다른 버전은 지원하지 않습니다. 예를 들어 Debian의 경우:
정의된 시간대에서 실행되도록 cron 데몬을 제한합니다 . 현재는 사용자별 시간대를 지원하지 않습니다. 모든 작업: 시스템 및 사용자 작업은 구성된 시간대에 따라 실행됩니다. 사용자가 crontab에서 환경 변수를 지정하더라도TZ
이는 crontab에서 실행되는 명령에만 영향을 미치고 crontab 작업 자체의 실행에는 영향을 미치지 않습니다.
그리고 Fedora에서는:
CRON_TZ
cron 테이블에 특정 시간대를 지정합니다 . 사용자는 지정된 시간대에 선택한 테이블 시간을 입력합니다. 로그의 시간은 데몬이 실행 중인 현지 시간대를 기준으로 합니다.
man 5 crontab
따라서 시스템의 crontab 매뉴얼 페이지( )를 확인하십시오. (위의 두 단락은 해당 시스템의 매뉴얼 페이지에서 가져온 것입니다.)
답변2
cron
지정된 사용자별(또는 작업별) 시간대에 작업이 예약되도록 지시하는 보편적인 방법은 없는 것 같습니다 .
하지만 이 문제를 해결하는 것은 어렵지 않을 것입니다. 예를 들어 매일 오전 10시 30분(PST)에 작업을 실행하려면 래퍼를 작성하고 매 시간마다 30분마다 호출하면 됩니다.
30 * * * * wrapper ...
그런 다음 래퍼는 내부적으로 자체 시간대를 설정하고 현재 시간이 오전 10시 30분에 가까운 경우에만 지정된 명령을 실행할 수 있습니다. 들어가지 않기 때문에 약간의 편차는 허용해야 합니다.정확히매시 30분.
충분히 유용하다면 이런 래퍼를 직접 작성할 수도 있습니다. 나는 다음과 같은 구문을 생각하고 있습니다.
cron-wrapper -tz [zone] -time [time] command args...
또는 더 간단하게는 시간을 UTC로 지정하고 시간대 지정을 생략할 수 있습니다(이렇게 하면 시간대 지정 구문을 결정할 필요가 없습니다).
예를 들어, 현재 CDT(중앙 일광 절약 시간)를 사용하고 있더라도 작업이 항상 24시간마다 실행되도록 지정된 CST(중앙 표준시) 시간에 작업을 실행해야 한다는 요구 사항이 있습니까? 그럼 일년 중 절반은 오전 10시 30분에, 나머지 절반은 오전 11시 30분에 실행되도록 하시겠습니까? (대부분의 사람들은 매일 일관된 벽시계 시간에 작업이 실행되기를 원합니다. 그렇다고 꼭 그래야 한다는 뜻은 아니지만 cron
지원되는 사용법입니다.)