Wie funktioniert Cron?

2986
Juanjo Conti

Ich möchte eine App schreiben, die stark genutzt wird cron. Es werden Python-Programme ausgeführt, die jede Minute in weniger als einer Sekunde laufen.

Wie Mähne dieser Linien:

*/1 * * * * python crtip.py parameters 

meine crontab -lkann haben Wie funktioniert es? Verzweigt es sich für jeden geplanten Job?

Vielen Dank,

2
Nicht sicher. Es geht um den internen Code von cron und die Verwendung beim Codieren. Juanjo Conti vor 14 Jahren 2
* / 1 ist das gleiche wie *. Was die Grenzwerte angeht, vermute ich, dass Sie, wenn Sie gegen Grenzwerte auf Betriebssystemebene stoßen, diese falsch verwenden. Haben Sie darüber nachgedacht, einen Dämon für diese Aufgaben zu erstellen? ceejayoz vor 14 Jahren 0
Von welchem ​​Cron-Daemon redest du? Ich bin der aktuelle Entwickler von Dillons Cron, und ich könnte Ihnen eine Antwort darauf geben. Aber es gibt auch Vixie Cron, Fcron, Bcron, ... Vixie Cron ist der am weitesten verbreitete Cron-Daemon auf * nix. Wenn ich also raten muss, dann spreche ich davon. dubiousjim vor 14 Jahren 2

4 Antworten auf die Frage

9
sleske

Um Ihre Fragen zu beantworten:

  • Wie viele Zeilen darf Crontab haben?

Mir ist keine maximale Zeilenanzahl in Crontab bekannt. Allerdings sind mehr als ein paar Hundert Zeilen wahrscheinlich ziemlich ungewöhnlich (daher nicht gut getestet) und auch schwer zu warten. Also würde ich wahrscheinlich vermeiden, das zu übertreffen.

  • Verzweigt es sich für jeden geplanten Job?

Ja.

Das heißt, cronwird normalerweise nicht für die Art von Dingen verwendet, die Sie beschreiben. Wenn Sie ein Programm so häufig und mit so vielen verschiedenen Parametern aufrufen müssen, ist es wahrscheinlich sinnvoller, eine Art Daemon / Server-Prozess zu schreiben. Vorteile wären:

  • schöne, vereinheitlichte Protokollierung (anstatt Nachrichten in crons Log zu speichern oder zu verschicken)
  • mehr Kontrolle darüber, wann Programme ablaufen (und Genauigkeit von mehr als einer Minute)
  • mehr Leistung, da Sie sich nicht immer intern verzweigen müssen
  • einfacher zu warten / zu installieren als eine riesige Crontab

Vielleicht könnten Sie genauer beschreiben, wie viele Aufrufe Sie benötigen, mit welchen Parametern und zu welchem ​​Zweck. Dann können wir besser helfen.

3
dubiousjim

Hier finden Sie Antworten für einen Cron-Daemon, Dillons Cron (Dcron), für den ich der aktuelle Entwickler bin. Es gibt eine Vielzahl von Cron-Daemons im Vertrieb, und die Antworten werden unterschiedlich sein. Vixie Cron ist wahrscheinlich am weitesten verbreitet; Ich kenne die Antworten dafür nicht.

Für dillons cron kann ein Benutzer auf jeden Fall 256 signifikante Zeilen in seiner Crontab haben (dies ist zur Kompilierzeit konfigurierbar). Root kann viel mehr als das haben (denke ich 65535). Plus root kann mehrere crontabs haben (die unter / var / spool / cron / crontabs / root sowie weitere zusätzliche in /etc/cron.d/).

Cron-Befehle werden nur einmal pro Minute zu Beginn der Minute ausgeführt. Sie könnten 60 verschiedene Befehle jede Minute laufen haben, und das Präfix sie nur mit sleep 1, sleep 2und so weiter. Aber ich bezweifle, dass dies die beste Lösung für Sie ist.

Ja, in unserer Implementierung gibt jeder Cronjob einen separaten Prozess ab. Wenn es eine Ausgabe in stdout oder stderr gibt, wird ein weiterer Prozess für das Versenden von E-Mails verwendet.

2
Janne Pikkarainen

Ja, es wird für jeden Cronjob gabelt. Wenn Ihr Server jedoch nur mäßig leistungsfähig ist, werden Sie meiner Meinung nach nicht so schnell auf Probleme stoßen. Meine persönlichen Homepages laufen auf einem sehr alten Pentium III 1.1 GHz / 512 MB RAM / langsamer IDE HD, und es leidet nicht, dass jede Stunde 15 verschiedene Cronjobs laufen.

Wenn Ihre Cronjobs extrem CPU oder I / O-hungrig sind, kann Ihre Laufleistung variieren, aber der Teil "Sie laufen in weniger als einer Sekunde" lässt mich glauben, dass Sie keinerlei Probleme sehen werden. Denken Sie an etwas komplexeres, wenn Sie Zeit dafür benötigen.

1
Bart M.

Ich hatte ein ähnliches Problem, da ich viele Prozesse in meiner Crontab verwalten musste. Was ich tat, war ein Hauptskript zu schreiben, das alle ausführbaren Dateien und Links in einem bestimmten Ordner (in der Befehlszeile) auflistete und nacheinander ausführte. Dieses Skript habe ich in crontab mit dem Parameter "monitor" eingefügt, der jede Minute ausgeführt und alle Skripte in "$ BASEFOLDER / monitor" ausgeführt wird. Auf diese Weise können Sie auch Einträge haben, die stündlich, an bestimmten Tagen, morgens, abends, starten.

Mein Hauptskript bietet viel mehr als das, z. B. einen bestimmten garantierten Satz von Umgebungsvariablen, einheitliche Protokollierung und einige anwendungsspezifische Dinge, aber ich hoffe, Sie bekommen die Idee. Dies ähnelt dem cron.daily / cron.hhly-System, das einige Distributionen verwenden.