Antworten:
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 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.
Ich würde Monit verwenden und die Zykluszeit auf 10 Sekunden einstellen. Dies ist eine saubere Möglichkeit, dies außerhalb des Cron-Systems zu verwalten.
Ich mache dies mit bestimmten Skripten, die in einem Intervall von 15 Sekunden ausgeführt werden müssen.
Siehe: So führen Sie inkrementelle / kontinuierliche Sicherungen des zfs-Pools durch
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.
run every 10 seconds
wesentlich von den vorhandenen Antworten ab, die mindestens jede Minute synchronisiert werden.
* * * * * 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 ...