Angenommen, ich habe mehrere Cron-Skripte, die alle 15 Minuten ausgeführt werden müssen. Ich könnte sie zum Laufen bringen:, */15 * * * *
aber dann laufen sie alle zur gleichen Zeit. Es erscheint unsinnig, wenn der Server mehrere Minuten im Leerlauf bleibt und dann plötzlich versucht, ein Dutzend Skripte gleichzeitig auszuführen.
Gibt es eine Möglichkeit, ein Skript in Minute 1, 16, 31, 46 und ein anderes in Minute 2, 17, 32, 47 ausführen zu lassen?
Mit anderen Worten, ich möchte, dass jedes Skript alle 15 Minuten ausgeführt wird, aber es ist mir egal, dass sie speziell für die Viertelstunden ausgeführt werden.
run-parts
ist auch in Fedora / Red Hat-Systemen vorhanden.Der einfachste Weg, dies zu tun, besteht darin, die auszuführenden Befehle manuell einzurichten, wenn Sie dies möchten:
Sie können auch ein Skript schreiben, um die entsprechenden crontab-Einträge automatisch zu generieren (wodurch Tippfehler vermieden werden).
Einige Versionen von cron (wahrscheinlich auch die von Ihnen verwendete) akzeptieren eine erweiterte Syntax:
quelle
Cron ist nicht wirklich gut in dem, was du versuchst zu tun. Haben Sie darüber nachgedacht, ein Skript zu schreiben, das als Dämon fungiert, der im Grunde 15 Minuten lang ruht, den Befehl ausführt und dann eine Schleife durchläuft?
quelle
sleep 300
zwischen jeder Ausführung des Befehls, der eigene Ausführung des Befehls wird die Zeit Drift verursachen; Es wird möglicherweise um 15:10 Uhr und nicht um 15:00 Uhr ausgeführt. Und wenn der Hintergrundprozess abbricht oder das System anders als neu startet,crond
wird es nicht automatisch neu gestartet. Es gibt Möglichkeiten, einen Hintergrundprozess zu "dämonisieren", aber dann implementieren Sie ihn so gut wie neucrond
.run-parts
das mit den meisten Cron-Installationen geliefert wird, um genau das zu tun. Siehe @ AndrewSchulmans Antwort.Viele Distributionen haben /etc/cron.d/cronhourly, für die alle Skripte innerhalb stündlich ausgeführt werden. Sie können die Reihenfolge sogar festlegen, indem Sie sie mit fortlaufenden Nummern beginnen, wie 01scriptA 02scriptB - es sollte trivial sein, dass Sie bereits ein "cronhourlybyfour" herstellen müssen, wie wir es auf der Linux-Distribution von Smoothwall nennen :)
Hinweis: Dies verwendet Run-Parts wie zuvor vorgeschlagen und Run-Parts mag keine Skripte mit einem. Nennen Sie es im Namen also nicht "deletehomefolders.sh", sondern "01deletehomefolders" und stellen Sie sicher, dass Sie mit dem richtigen # beginnen! Zeile für was auch immer Sie beabsichtigen, Ihr Skript zu interpretieren.
quelle