어떻게하면 "N"분마다 무언가를 실행하게 할 수 있습니까? n % 5 == 1입니까?


42

는 내가 뭔가를 같은 라인 크론에서 5 분마다 실행 할 수 있습니다 알고 : 나는 그것을 12:00, 12시 5분, 12시 10분 실행하지 않으면 어떻게

*/5 * * * * /my/script 

하지만, 오히려 12:01, 12:06, 12:11 등? 나는 이것을 할 수 있다고 생각한다 :

1,6,11,16,21,26,31,36,41,46,51,56 * * * * /my/script 

...하지만 그것은 추한 것이다. 더 우아한 방법이 있습니까?

74
1-56/5 * * * * /my/script 

이것은 vixiecron에서 작동합니다. 다른 구현에 대해서는 잘 모르겠습니다.

  0

가장 일반적인 두 개의 cron을 다루는 fcron에서도 같은 구문을 사용할 수 있습니다.나는 dcron이 이것을 지원한다고 생각하지 않지만, 그것은 더 희귀합니다. 25 jan. 092009-01-25 04:10:17

  0

이 작품! Awesome .. :) 26 jun. 122012-06-26 22:05:42

  0

어떤 버전의 cron이 사용되고 있는지 어떻게 알 수 있습니까? 10 jan. 142014-01-10 17:15:07

  0

@AaronJLang 배포판의 패키지 관리자를 확인하여 이름에 cron이 포함 된 패키지 (특히'/ usr/sbin/cron '파일이 설치된 패키지)를 확인하십시오. 그 외에도 모든 배포판에서 작동하는지 쉽게 확인할 수있는 방법이 있는지 확신 할 수 없습니다. vixiecron이라면 시스템에'* vixie-cron * '과 일치하는 파일 이름이있을 것이고, 다른 cron 구현과 유사한 방법을 시도해 볼 수 있습니다. 그러나 "깨끗한"교차 배포 방법을 원한다면 [unix.SE]를 물어보십시오. 10 jan. 142014-01-10 17:25:01

  0

헤이, 그것은 나를 위해 일한다. 그러나 나는이 표현을 이해하지 않는다. 아무도 어떻게 작동하는지 설명 할 수 있습니까? 나는 또한 모든 일정을 7, 12, 22, 8, 13, 23 등으로 만들고 싶습니다. 그리고 어떻게 기분 좋을지 모르겠네요. 01 feb. 172017-02-01 14:24:06

  0

@Mat은 내가 곧 설명과 함께 게시물을 편집하게했습니다. 01 feb. 172017-02-01 16:56:13


16

귀하의 첫 번째 일정 사용

*/5 * * * * /my/script 

을 그리고 스크립트의 시작이 추가 :

sleep 60 

(예, 이것이 농담)

+1

실제로 변형을 사용하여 자정 1 초 전에 프로세스를 시작합니다. 22 jan. 092009-01-22 22:19:04

+4

아, 깎아 지른듯한 힘 -1 ;-) 02 sep. 092009-09-02 22:51:15

  0

나는 마지막 줄을 읽기 전에 이미 마우스를 downvote로 옮겼다. :) 23 nov. 112011-11-23 06:42:34


-5

sean.bright의 농담이 있어요 내 생각 ... 왜 사용하지 ...

* * * * * /my/script 

...하고 스크립트 내에서이 작업을 수행 ...

#!/bin/bash 
export WHEN=`date '+%M'` 
echo $WHEN 
export DOIT=`echo "$WHEN % 5" | bc` 
echo $DOIT 
if [ $DOIT != 0 ] ; then 
    echo "ha ha ha" 
fi 
echo "done" 

... kludge ... 아마도,하지만 crontab을만큼 추한 ... 모르겠어요.

  0

유용한 정보를 얻지 못할 때마다 프로세스를 실행하고 있기 때문에. 또한 if 문이 손상된 것 같습니다. ;-) 22 jan. 092009-01-22 22:41:56

  0

if 문을 수정했습니다. 22 jan. 092009-01-22 22:51:51

  0

한편으로는 더 좋습니다. 다른 한편으로는, 당신이해야 할 일이 없는지 알아내는 것이 더 많은 일입니다. 22 jan. 092009-01-22 23:12:32


-1

필자는 잠자기 기간을 첫 번째 매개 변수로 사용하고 스크립트는 나머지로 실행하는 새로운 스크립트 "delaystart"를 만듭니다. 나는 스크립트가 스크립트로 라인에 대한 crontab 라인을 확인하도록하고, 라인이 주석 처리되지 않은 경우에만 스크립트를 시작한다. 재사용이 가능하기 때문에 ps는 실제로 스크립트가 실행되지 않을 때 실행 중이라고보고하지 않습니다.

#!/bin/bash 
sleeptime=$1 
sleep ${sleeptime} 
shift 
if (! crontab -l | grep -e '#.+delaystart '${sleeptime} $*) then 
    $* 
fi 

0

이것은 꽤 오래된 주제이지만 많은 시간이 지나면 몇 가지 다른 옵션이 있습니다. 그 중 하나는 cron을 전혀 사용하지 않고 systemd 타이머를 사용합니다. 타이머의 이러한 유형은 늘 지속 : 다음을 사용하여 당신에게

상세 정보

https://wiki.archlinux.org/index.php/Systemd/Timers 예 애드혹 명령을

# systemd-run --on-calendar="*:1/5" /bin/touch /tmp/foo2 
Running timer as unit run-r31335c4878f24f90b02c8ebed319ca60.timer. 
Will run service as unit run-r31335c4878f24f90b02c8ebed319ca60.service. 

# systemctl status run-r31335c4878f24f90b02c8ebed319ca60.timer 
● run-r31335c4878f24f90b02c8ebed319ca60.timer - /bin/touch /tmp/foo2 
    Loaded: loaded 
Transient: yes 
    Drop-In: /run/systemd/system/run-r31335c4878f24f90b02c8ebed319ca60.timer.d 
      └─50-Description.conf, 50-OnCalendar.conf, 50-RemainAfterElapse.conf 
    Active: active (waiting) since Wed 2017-10-25 09:05:13 UTC; 40s ago 

# ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:06 /tmp/foo2 

# sleep 300; ls -l /tmp/foo* 
-rw-r--r-- 1 root root 0 Oct 25 09:11 /tmp/foo2 

# date; ls -l /tmp/foo2 
Wed Oct 25 09:21:42 UTC 2017 
-rw-r--r-- 1 root root 0 Oct 25 09:21 /tmp/foo2 

편집을 실행하는 데 사용할 수 있습니다 여기 다른 많은 옵션과 함께 초보다 더 높은 단위를 제공합니다 재부팅시 적절한 oncalendar 행을 사용하여 적절한 서비스 파일을 생성하도록하려는 경우