it-swarm.com.de

Wie bringe ich cron dazu, jede "N" -te Minute etwas auszuführen, wobei n% 5 == 1 ist?

Ich weiß, dass ich in cron alle fünf Minuten etwas laufen lassen kann, mit einer Zeile wie:

 */5 * * * * /my/script

Was ist, wenn ich nicht möchte, dass es um 12:00, 12:05, 12:10, sondern um 12:01, 12:06, 12:11 usw. läuft? Ich schätze, ich kann das machen:

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

... aber das ist hässlich. Gibt es eine elegantere Möglichkeit?

43
mike
1-56/5 * * * * /my/script

Dies sollte auf vixiecron funktionieren, andere Implementierungen sind mir nicht sicher.

76
David Z

Verwenden Sie Ihren ersten Zeitplan:

*/5 * * * * /my/script

Fügen Sie dies am Anfang Ihres Skripts hinzu:

sleep 60

(Ja, das ist ein Witz)

17
Sean Bright

Dies ist ein ziemlich altes Thema, aber da so viel Zeit vergangen ist, gibt es jetzt ein paar andere Optionen. Eine davon ist, cron überhaupt nicht zu verwenden und systemd-Timer zu verwenden. Wenn Sie diese Optionen verwenden, erhalten Sie eine höhere Granularität als Sekunden und viele andere Optionen

Weitere Informationen finden Sie hier https://wiki.archlinux.org/index.php/Systemd/Timers

zB um einen Adhoc-Befehl auszuführen

# 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

edit: Diese Art von Timern bleibt auch nach einem Neustart bestehen, wenn Sie sicherstellen möchten, dass Sie eine korrekte Servicedatei mit der entsprechenden Zeile oncalendar erstellen

0
krad