cron이 각인되지 않도록하는 방법은 무엇입니까?


13

15 분마다 실행해야하는 몇 가지 크론 스크립트가 있다고 가정합니다. 나는 그들을 실행하도록 설정할 수 */15 * * * *있지만 : 그들은 모두 동시에 실행됩니다. 서버가 몇 분 동안 유휴 상태에 있고 갑자기 수십 개의 스크립트를 동시에 실행하려고 시도하는 것은 어리석은 것처럼 보입니다.

1, 16, 31, 46 분에 하나의 스크립트를 실행하고 2, 17, 32, 47에 다른 스크립트를 실행할 수있는 방법이 있습니까?

다시 말해, 각 스크립트가 15 분마다 실행되기를 원하지만, 분기 시간 표시에서 특별히 실행되는 것은 중요하지 않습니다.

답변:


7

당신은 이것을 필요 이상으로 어렵게 만들고 있습니다. 세미콜론으로 구분하여 모두 같은 줄에 넣으십시오.

*/15 * * * * command1 ; command 2 ; command 3

실행 command1하고 완료 될 때까지 기다렸다가 실행 하고 완료 될 command2때까지 기다립니다.


15

cron 작업을 다음과 같이 보이게 6-59/15 * * * *하면 시간당 6, 21, 36 및 51 분에 실행됩니다.

일부 버전의 cron에서는 작동하지 않을 수 있습니다.


14

모든 스크립트를 디렉토리에 넣고 /etc/cron.15mcron을 실행할 수 있습니다.

*/15 * * * * run-parts /etc/cron.15m

run-parts명령 이 있다고 가정합니다 . 최소한 모든 데비안 기반 시스템에 존재합니다. 이름 지정된 디렉토리에서 모든 실행 프로그램을 한 번에 하나씩 순서대로 실행합니다.

이 방법의 단점은 스크립트 중 하나가 중단되면 나머지는 대기하고 실행되지 않는다는 것입니다. 이들 모두의 실행 시간이 15 분을 초과하면 작업이 다시 실행되기 시작하여 많은 프로세스가 쌓일 수 있습니다.


run-partsFedora / Red Hat 시스템에도 있습니다.
mattdm

9

이 작업을 수행하는 가장 간단한 방법은 원하는 때 실행할 명령을 수동으로 설정하는 것입니다.

0,15,30,45 * * * * command0
1,16,31,46 * * * * command1
2,17,32,47 * * * * command2
...
14,29,44,59 * * * * command14

또는 적절한 크론 탭 항목을 자동으로 생성하는 스크립트를 작성할 수 있습니다 (오타를 피함).

일부 버전의 cron (아마도 사용중인 버전 포함)은 확장 구문을 허용합니다.

0-59/15 * * * * command0
1-59/15 * * * * command1
1-59/15 * * * * command2
...
14-59/15 * * * * command14

0

Cron은 실제로하려는 일을 잘하지 않습니다. 기본적으로 15 분 동안 잠자고 명령을 실행 한 다음 반복되는 데몬 역할을하는 스크립트 작성을 고려 했습니까?


1
그것에 몇 가지 잠재적 인 문제가 있습니다. 하나는 sleep 300명령을 실행할 때마다 명령 자체를 실행하면 시간이 줄어든다는 것입니다. 15:00이 아닌 15:10마다 실행될 수 있습니다. 또한 백그라운드 프로세스가 종료되거나 시스템이 재부팅되는 경우와 달리 crond자동으로 다시 시작되지 않습니다. 백그라운드 프로세스를 "데몬"하는 방법이 있지만 거의 다시 구현하고 crond있습니다.
Keith Thompson

그래, 나는 그것이 완벽한 해결책은 아니라고 동의하지만 (항상 &로 작업을 배경으로 할 수는 있지만) 당신은 간다.
매트 시몬스

1
대신 cron이 모든 명령을 차례로 실행하는 단일 스크립트를 실행하도록하십시오. 실제로, run-parts대부분의 크론 설치와 함께 제공 되는 표준 스크립트 가 필요합니다. @AndrewSchulman의 답변을 참조하십시오.
tylerl

0

많은 배포판에는 /etc/cron.d/cronhourly가 있으며,이를 위해 모든 스크립트가 매시간 실행됩니다. 순차 번호, lik 01scriptA 02scriptB로 주문을 시작하여 주문을 지정할 수도 있습니다. Smoothwall의 Linux distro base에서 호출 할 때 이미 "cronhourlybyfour"를 제조해야하는 cron 지식이 있으면 간단합니다. :)

경고의 말씀 : 이것은 이전에 제안 된대로 런 파트를 사용하며 런 파트는로 된 스크립트를 좋아하지 않습니다. 이름에 "deletehomefolders.sh"라고 부르지 말고 "01deletehomefolders"라고 부르고 올바른 #으로 시작하십시오! 스크립트를 해석하려는 모든 것에 대한 라인.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.