Wie kann ich einen Cron-Job einplanen, der unter Linux alle 10 Sekunden ausgeführt wird?

14

Ich weiß, wie man jede Minute macht, aber wie sieht es alle 10 Sekunden aus?

Alex
quelle

Antworten:

10

Sie können den Job nicht alle zehn Sekunden einplanen, aber ich nehme an, Sie können den Job so einplanen, dass er jede Minute ausgeführt wird und in 10-Sekunden-Intervallen in einer Schleife ruht. Dies würde vorausgesetzt, dass Ihr Befehl abgeschlossen ist, bevor das Zehn-Sekunden-Intervall abläuft, oder dass Sie eine Überlappung erhalten, wenn der nächste Befehl ausgeführt wird. Dies fühlt sich wie eine prekäre Lösung an, aber wenn Sie eine sehr kurze Ausführung des Hauptbefehls des Skripts garantieren können, würde dies funktionieren.

#!/bin/bash
i=0

while [ $i -lt 6 ]; do
  /run/your/command &
  sleep 10
  i=$(( i + 1 ))
done
Michael
quelle
Ich mache eine ähnliche Sache ... Ich benutze nur * 's in crontab, und dann verwendet mein Skript Flock und Loops für immer und wird nie beendet, es sei denn, es kann keine Sperre erhalten.
Peter
22

Ich hatte letzte Woche eine ähnliche Aufgabe. Meine Lösung bestand darin, die Standard-Cron-Einträge mit der gewünschten Frequenz zu multiplizieren. Meine Crontab sieht so aus:

* * * * * /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 10; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 20; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 30; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 40; /usr/local/bin/php /var/www/myscript.php
* * * * * sleep 50; /usr/local/bin/php /var/www/myscript.php

Wenn Sie die Ergebnisse von myscript.php überprüfen möchten, zB zum Debuggen, hängen Sie einfach an

&> /tmp/myscipt.log

zu jeder Zeile in der Crontab oben. Dann werden stderr und stdout in die Protokolldatei umgeleitet.

Wir sehen
quelle
2
+1 für kreative Cron Verwendung
Shodanshok
2
Dies ist meiner Meinung nach die beste Lösung. Es ist klar, was es tut und erfordert kein Skript oder eine Lösung von Drittanbietern.
Jeremy
0

Cron lässt nur mindestens eine Minute zu. Sie können dies versuchen -

* * * * * ( sleep 10 ; /usr/bin/wget http://api.us/application/)
Thoman
quelle
0

Wenn Sie unter 10 Sekunden gehen möchten, z. B. 5 Sekunden, empfehle ich, eine Worker-Schleife mit einem kleinen Skript wie diesem zu erstellen:

#!/bin/bash

INTERVAL=5
while true; do

  echo "do something"

  # wait for next interval
  WAIT_UNTIL=$(($(date +%s) + $INTERVAL))
  while [ $(date +%s) -lt $WAIT_UNTIL ]; do
    sleep 1
  done

done

Wenn Sie weniger als eine Sekunde benötigen, fügen Sie dem Datumsbefehl Mikrosekunden hinzu.

Wir sehen
quelle
Dies weicht run every 10 secondswesentlich von den vorhandenen Antworten ab, die mindestens jede Minute synchronisiert werden.
Angst
0
* * * * * script to run
* * * * * sleep 10; script to run
* * * * * sleep 20; script to run

Hier kann das Skript im Abstand von 10 Sekunden ausgeführt werden ...

Sukhjinder Singh
quelle
Diese Lösung wurde bereits vor 5 Jahren veröffentlicht. Du solltest es nur hochschreiben, anstatt es erneut zu posten.
Gerald Schneider