GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Kann ich einen Cronjob häufiger als jede Minute ausführen?

Lösung 1:

Kandidat für den kreativsten Missbrauch eines Linux-Befehls:

nohup watch -n 30 --precise yourprog >/dev/null &

Wenn yourprog besteht aus:

date +%M.%S.%N >> yourprog.out

dann yourprog.out könnte so aussehen:

50.51.857291267
51.21.840818353
51.51.840910204
52.21.840513307
52.51.842455224
53.21.841195858
53.51.841407587
54.21.840629676

was auf eine ziemlich gute Genauigkeit hinweist.

Hier ist eine Erklärung der Teile des Befehls:

  • nohup - Dies behält den folgenden Befehl bei, watch in diesem Fall vom Beenden, wenn das Terminal beendet wird.
  • watch - Dieses Programm führt einen Befehl wiederholt aus. Normalerweise wird der erste Bildschirm der Ausgabe des Befehls jedes Mal angezeigt watch führt den Befehl aus.
  • -n 30 - Das Intervall, in dem der Befehl ausgeführt werden soll. In diesem Fall alle dreißig Sekunden.
  • --precise - Ohne diese Option watch führt den Befehl after aus Intervall Sekunden. Damit beginnt jeder Start des Befehls ein Intervall wenn möglich. Wenn diese Option im Beispiel nicht angegeben wäre, würden die Zeiten aufgrund der Zeit, die zum Starten und Ausführen des Befehls benötigt wird, jedes Mal um mehr als 30 Sekunden später (yourprog ).
  • yourprog - Das Programm oder die Befehlszeile für watch ausführen. Wenn die Befehlszeile Sonderzeichen der Shell enthält (z. B. Leerzeichen oder Semikolon), muss sie in Anführungszeichen gesetzt werden.
  • >/dev/null - Das Größer-als leitet die Ausgabe des Befehls um, der von watch ausgeführt wird in eine Datei, /dev/null . Diese Datei verwirft alle in sie geschriebenen Daten. Dies verhindert, dass die Ausgabe auf den Bildschirm geschrieben wird oder seit nohup verwendet wird, verhindert es, dass die Ausgabe an eine Datei namens nohup.out gesendet wird .
  • & - Die watch Der Befehl wird im Hintergrund ausgeführt und die Kontrolle wird an das Terminal oder den übergeordneten Prozess zurückgegeben.

Beachten Sie, dass nohup , die Umleitung der Ausgabe und die & Hintergrundsteuerungsoperatoren sind nicht spezifisch für watch .

Hier ist eine Erläuterung des Beispiels yourprog Skript:

  • date - Gibt das aktuelle Datum und/oder die Uhrzeit aus. Es kann sie auch setzen.
  • +%M.%S.%N - Dies gibt das Ausgabeformat für date an benutzen. %M ist die aktuelle Minute, %S ist die aktuelle Sekunde und %N ist die aktuelle Nanosekunde.
  • >> yourprog.out - Dies leitet die Ausgabe von date um Befehl in eine Datei namens yourprog.out . Das doppelte Größer-als bewirkt, dass die Ausgabe bei jedem Aufruf an die Datei angehängt wird, anstatt dass der vorherige Inhalt überschrieben wird.

Bearbeiten :

Eine andere Sache, die möglicherweise missbraucht werden könnte (oder vielleicht eine legitime Verwendung ist), sind systemd-Timer.

Siehe systemd/Timers als Cron-Ersatz und Cron vs systemd timers.

Ich werde versuchen, bald ein Beispiel zu posten.

Lösung 2:

Wenn Ihre Aufgabe so häufig ausgeführt werden muss, ist Cron das falsche Tool. Abgesehen von der Tatsache, dass Jobs einfach nicht so häufig gestartet werden, riskieren Sie auch ernsthafte Probleme, wenn die Ausführung des Jobs länger dauert als das Intervall zwischen den Starts. Schreiben Sie Ihre Aufgabe neu, um sie zu daemonisieren und dauerhaft auszuführen, und starten Sie sie dann bei Bedarf von Cron aus (während Sie sicherstellen, dass sie nicht neu gestartet wird, wenn sie bereits ausgeführt wird).

Lösung 3:

Cron ist so konzipiert, dass es jede Minute aufwacht, daher ist es nicht möglich, dies ohne Hacking zu tun, z. B. schlafen, wie Sie erwähnt haben.

Lösung 4:

* * * * * /path/to/program
* * * * * sleep 30; /path/to/program

Vergessen Sie nicht, etwas in Ihr Programm zu schreiben, damit es beendet wird, wenn bereits eine vorherige Instanz läuft.

#!/bin/sh

if ln -s "pid=$$" /var/pid/myscript.pid; then
  trap "rm /var/pid/myscript.pid" 0 1 2 3 15
else
  echo "Already running, or stale lockfile." >&2
  exit 1
fi

Natürlich lässt dies immer noch eine sehr kleine Chance für Fehler, suchen Sie also bei Google nach einer besseren Lösung, die für Ihre Umgebung geeignet ist.

Lösung 5:

Sie können dies mit Software von Drittanbietern tun.

Eine Option, die für mich gut funktioniert hat, ist frequent-cron

Es ermöglicht Millisekunden-Präzision und gibt Ihnen die Möglichkeit, die nächste Ausführung aufzuschieben, bis die aktuelle beendet wurde..


Linux
  1. Wie kann man Cronjobs öfter als einmal pro Minute ausführen?

  2. Ausführen eines Cron-Jobs unter Linux alle sechs Stunden

  3. Cronjob alle 1 Stunde und 10 Minuten ausführen

  4. Warum läuft mein cron.d-Job nicht pro Minute?

  5. Cron alle 2 Stunden ausführen

Cron-Jobs alle 5, 10 oder 15 Minuten ausführen

So planen Sie einen Job in Cron so, dass er jede Stunde in Ubuntu 20.04 ausgeführt wird

So führen Sie jede Woche am Sonntag einen Crontab-Job aus

Wie würde ich einen Cron-Job dazu bringen, alle 30 Minuten ausgeführt zu werden?

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

Wie führe ich Cron-Jobs jeden Tag zu einer bestimmten Stunde aus?