2009-01-22 227 views
42

我知道我可以有一些運行在cron每五分鐘這樣一行:如何讓cron每分鐘運行一次「N」分鐘,其中n%5 == 1?

*/5 * * * * /my/script 

,如果我不希望它運行在12:00,12:05,12:10什麼,但而是在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,我不確定其他實現。

16

使用第一個日程表:

*/5 * * * * /my/script 

並添加到您的腳本的開頭:

sleep 60 

(是的,這是一個笑話)

+1

我實際上使用這種變化來在午夜前1秒啓動一個進程。 – 2009-01-22 22:19:04

+4

啊,沉睡的力量-1 ;-) – 2009-09-02 22:51:15

+0

我在閱讀最後一行之前就已經移動鼠標來downvote這個:) – ymihere 2011-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" 

...一個雜牌組裝電腦......也許,但醜如crontab的......我不知道。

-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行