
Ist es möglich, Cron seine Anweisungen aus der Ausgabe eines Shell-Skripts beziehen zu lassen, anstatt eine statische Datei zu lesen?
Ich versuche, Crontabs auf mehreren Rechnern zu verwalten, und es ist mühsam, für jeden Rechner separate Crontab-Dateien zu pflegen. Ich möchte, dass Cron stattdessen ein Shell-Skript ausführt, das für jeden Job Crontab-Zeilen ausgibt, je nachdem, ob ein bestimmter Rechner diesem Job zugewiesen ist. Kann ich das tun?
PS: Ich habe gehört, dass einige Puppet/Chef/usw. zu diesem Zweck vorschlagen, aber ich denke, das ist übertrieben, um nur dieses eine Problem zu lösen.
Antwort1
Ich denke, der einfachste Weg, dies auf den meisten Distributionen zu tun, wäre die Verwendung automatisierter Bereitstellungstools wie Puppet/Chef sowie des Verzeichnisses /etc/cron.d. Sie können Crontabs in diesem Verzeichnis platzieren, allerdings verwenden sie das folgende Format anstelle des üblichen:
* * * * * <user> <command>
Wo ist der Benutzer, der den Cron ausführen wird?
Sie scheinen zu denken, dass Puppet übertrieben ist (was es nicht ist), aber der Verzeichnisteil würde auch auf jede andere Lösung zutreffen.
Antwort2
Ja, das können Sie natürlich tun. Richten Sie einfach das Skript ein, das Sie zur Erstellung einer Crontab-Ausgabe benötigen, und senden Sie es per SCP an die Zielserver.
Dort kann ein statischer Cron-Job diese Crontabs dann gezielt lesen und von einem beliebigen Ort aus ausführen.
Antwort3
Dies ist genau der vorgesehene Einsatzzweck für Puppet & Friends.
Ihre einzige Möglichkeit könnte darin crontab
bestehen, den Puppet-Agenten auszuführen, wenn Ihnen die Einrichtung durch die Paketverwaltung Ihrer Distribution nicht gefällt.
Das externe Skript würde sich auf dem Puppet-Master befinden. An einem Ort. Für alle Maschinen.
Wenn das Problem so groß ist, dass man die Verwendung eines externen Skripts in Betracht ziehen sollte, empfehle ich Puppet. Chef kann sicherlich etwas Ähnliches.
Ich habe mit Puppet angefangen, nur um die Verwaltung ~/.ssh/authorized_keys
auf mehreren Maschinen zu ermöglichen, was ein ähnlich „kleines“ Problem ist.
Antwort4
Ein beliebter Trick besteht darin, einen Crontab-Eintrag zu erstellen, der die gesamte Crontab aktualisiert. Dies funktioniert einwandfrei, solange Ihr Shell-Skript niemals fehlerhafte Daten an sendet crontab
.
Ich schlage jedoch einen anderen Ansatz vor, der einfacher zu handhaben ist: Erstellen Sie einen statischen Crontab-Eintrag, der ein Skript häufig ausführt. Lassen Sie das Skript die ganze schwere Arbeit erledigen, herauszufinden, wann es Zeit ist, etwas auszuführen. Auf diese Weise können Sie die Crontab weiterhin als normale Crontab verwenden, ohne dass das Skript über alles informiert sein muss, was auf jedem Computer ausgeführt werden könnte.