나는 내가 지정한 순서대로 매일 두 개의 작업이 연속적으로 실행되기를 원합니다. 이 crontab이 내가 원하는 것을 안정적으로 수행할 수 있습니까?
@daily job1
@daily job2
나는 그것들이 차례로 실행된다고 가정하지만 웹을 검색하거나 다음 맨페이지 중 하나에서 답을 찾을 수 없습니다: cron(1)
, crontab(1)
, crontab(5)
.
@daily
cron이 예정된 작업을 병렬로 또는 예측할 수 없는 순서로 실행하는 경우 위의 crontab은 분명히 내가 원하는 작업을 수행하지 않습니다.
나는 단순히 쉘 스크립트를 만들어 순서대로 실행할 수 있다는 것을 알고 있습니다. cron이 어떻게 작동하는지 궁금합니다(그리고 테스트 데이터를 수집하거나 소스 코드를 읽기에는 너무 게으르다).
Cron은 소프트웨어 패키지로 제공됩니다 cron
. 운영 체제는 Ubuntu 10.04 LTS(서버)입니다.
답변1
소스 코드를 잠깐 살펴보면(동일한 버전이라고 생각되는 Debian squeeze에서) 주어진 파일의 항목이 동일한 타이밍에 순차적으로 실행되는 것처럼 보입니다. 이 목적을 위해 @daily
및 0 0 * * *
는 동일합니다(실제로 이 cron 과 @daily
동일합니다 0 0 * * *
).
나는 전반적으로 이것에 의존하지 않을 것입니다. 어느 날 누군가는 32코어 CPU(이 중 31개는 유휴 상태)를 활용하기 위해 cron이 작업을 병렬로 실행해야 한다고 결정할 수도 있습니다. 크론 소스에서 발견된 20년 된 할 일 항목을 구현하는 동안 이 작업을 수행할 수 있습니다.
이들 모두는 태그가 지정되고 로드가 제한되어야 합니다. 즉, @hourly는 "0 * * * *"가 아니라 "매 시간의 앞부분에 가까우나 시스템 로드가 낮을 때까지"를 의미하지 않습니다. (…) (vix, 1990년 1월)
여기에 글을 쓰는 것은 매우 쉽습니다 @daily job1; job2
. 과제를 순서대로 수행하는 것이 중요하다면 작성한 내용의 직접적인 결과로 만드십시오.
또한 명시적인 순서를 사용하면 향후 관리자가 중요하지 않다고 간주하는 행 재정렬의 위험이 제거됩니다.
답변2
http://ss64.com/osx/crontab.html(및 기타 참조) @daily는 다음과 같습니다.
0 0 * * *
자정에 운행한다고 하네요. 이 유형의 두 노선 모두 가능한 한 자정에 가깝게 시작될 것으로 예상하지만 어느 노선이 먼저 실행될지는 보장할 수 없습니다. 나는 의견에서 jw013의 제안에 동의합니다.
과소 지정된다는 사실은 일반적으로 구현에 따라 다르다는 것을 의미하며 일반적으로 이 동작에 의존하지 않는 것이 가장 좋습니다. 일련의 중요한 작업을 별도의 crontab 항목으로 두는 것보다 자체 스크립트에 넣는 것이 더 깔끔하고 더 잘 구성될 수 있습니다.
답변3
@Giles는 가져올 때 단일 스크립트를 사용하여 순차적으로 실행하는 것이 적절하다고 언급했습니다.
cron.daily
파일은 실행 시간을 지정하지 않습니다. 내 경험상 직렬로 실행됩니다. 많은 백그라운드 작업이 랩톱이나 기타 시스템에서 실행될 수 있으므로 이는 의미가 있습니다.
지정된 시간이 지나면 현재 분에 예약된 모든 작업이 실행됩니다. 다양한 시간을 활용하는 것이 좋습니다.
상호 배타적인 작업이 있는 경우 일반적으로 잠금 파일을 사용하여 다른 작업이 실행 중인지 확인합니다.