Ich möchte die Uhrzeit, zu der bestimmte Cron-Jobs ausgeführt werden, programmatisch ändern. Ich bin mir nicht sicher, ob ich das richtig angehe, aber hier ist der Plan.
Aufträge, die geändert werden können, werden mit einem Kommentar am Ende der Zeile "#change-enabled" versehen.
15 5 7,14,21,28 * * /path/to/executable1 #change-enabled
15 * * * * /path/to/executable2
45 5 */2 * * /path/to/executable3 #change-enabled
Dann möchte ich die Ausgabe von "crontab -l" durch sed leiten, um Jobs mit diesem Kommentar am Ende zu finden und zu ändern, und die Ergebnisse davon durch "crontab -" leiten.
// Bearbeiten
Mein Bauchgefühl sagt mir, dass ich dies nicht tun sollte, da die neue Stunde anhand von Daten eines Drittanbieters ermittelt wird. (Google Analytics Data Export API) Also ist /etc/cron.d/ etwas, von dem ich mich für diese Anwendung fernhalten werde.
Hier ist der Befehl, der während der Fehlersuche mit allen meinen aktuellen Cron-Jobs funktioniert hat. Ich habe "date +%l" anstelle von "/home/user/slow-hour" verwendet und das "| cron -" weggelassen, um zu sehen, was ich gedruckt bekomme.
crontab -l | sed -e "s/^\([^ ]*\) [0-9]* \(.*#change-enabled\)/\1`/home/user/slow-hour` \2/" | crontab -
Der Inhalt von ~/slow-hour wird ein Skript sein, das stündliche Daten für Website-Profile bei Google Analytics abruft und nach der langsamsten Stunde sucht. Im Falle eines Fehlers, welcher Art auch immer, wird das Skript 1 Uhr morgens zurückgeben, mir eine Benachrichtigung schicken und dann verschwinden.
Um die Wahrscheinlichkeit zu verringern, dass die Ausführung eines Tages übersprungen wird, weil die langsame Stunde vor der aktuellen Stunde liegt, wird der automatische Cron-Rescheduler so eingestellt, dass er um Mitternacht läuft und die früheste Stunde, zu der ~/slow-hour zurückkehrt, 1 Uhr morgens ist.
Auf der Grundlage meiner manuellen Cron-Job-Anpassungen in der Vergangenheit gehe ich nicht davon aus, dass der Ausschluss von Mitternacht als langsamste Stunde in meinem Fall ein Problem darstellt.