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?

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

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.


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/)

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.


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


Diese Lösung wurde bereits vor 5 Jahren veröffentlicht. Du solltest es nur hochschreiben, anstatt es erneut zu posten.
Gerald Schneider
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.