einmal pro Stunde einen Befehl ausführen lassen

12

Ich habe einen Indexer für Sphinx und möchte, dass er einmal pro Stunde unter Linux ausgeführt wird. Wie würde ich das machen?


quelle

Antworten:

14

Da alle anderen kurze Antworten veröffentlichen, dachte ich, ich wäre etwas aussagekräftiger ...

cron ist ein Daemon, der auf den meisten * nix-Systemen zu finden ist und geplante Befehle in den angegebenen Intervallen ausführt.

Sie fügen der Liste ein Skript hinzu, indem Sie es in den Ordner Ihrer Wahl kopieren:

  • cron.daily
  • cron.hourly
  • cron.monthly
  • cron.weekly

Diese Ordner befinden sich normalerweise unter /etcOrdner.

Nathan Osman
quelle
2
cron. * Ordner sind sehr distro-spezifisch. crontab ist die universelle Methode, um Artikel in festgelegten Intervallen von cron ausführen zu lassen.
MDMarra
Wahr. Ich gebe nur ein Beispiel. crontab gibt dir sowieso viel mehr Kontrolle.
Nathan Osman
9

cron .

Keks Monster
quelle
und verwenden Sie crontab, um die crontab-Datei zu bearbeiten ... siehe crontabrocks.org für ein nettes Intro
Doug Harris
7

Nur um anders zu sein -

Abhängig von Ihren Anforderungen können Sie den Befehl watch verwenden.

  watch --interval=3600 command
Bryan
quelle
1
Führt dies den Befehl alle 1 Stunde aus? oder wird der Befehl ausgeführt, 1 Stunde gewartet und dann erneut ausgeführt? Beachten Sie, dass es einen guten Unterschied macht, wenn der Befehl sehr lange dauert. (Ich frage, weil es nicht aus der Manpage klar war.)
Malabarba
Wirklich nicht so schwer, es selbst auszuprobieren.
Mimoralea
6

Verwenden Sie Crontab .

Pilger
quelle
2

Sie bearbeiten die Cron-Datei, indem Sie den Befehl eingeben crontab -e

Damit gelangen Sie in einen 'vi'-Editor (für aktuelles Linux und FreeBSD).

Geben Sie dann Folgendes ein: (Geben Sie zum Einfügen 'i' ein)

00 * * * * /path/to/sphinx_indexer.exe

dann speichern und beenden (drücken Sie 'esc' und geben Sie Folgendes ein)

:wq
Marklark
quelle
1

Mit dem Dienstprogramm cron

QUentin
quelle
1

Das ist , was Cron ist.

Michael Borgwardt
quelle
1

Wenn Sie es nur ab und zu benötigen, nicht dauerhaft wie gewohnt cron, und die watchLösung nicht flexibel genug ist, können Sie auch gutes altes Bash-Scripting verwenden:

while true; do
   # do stuff
   sleep $[60 * 60]
done
Grumbel
quelle
Dies funktioniert nicht als #do Stuff, wenn die Ausführung 3599 Sekunden dauert und das Skript dann je nach Anforderung die nächste Sekunde auf den Stationen auslösen und die Uhr auf 0 zurücksetzen muss. In diesem Fall wird es jedoch bei 3599 Sekunden und angehalten Schlafen Sie dann für die nächsten 3600 Sekunden weiter. Es wird keine Überlappung geben, sondern eine unerwartete Lücke zwischen den Iterationen. Hier versucht der Benutzer vermutlich jede Stunde einen Job ohne Cron auszuführen.
Mannoj