Ich habe eine Crontab, die von vielen Benutzern aktualisiert wird. Das Problem ist, dass es deshalb nicht einfach ist, herauszufinden, wer welche Änderung an einem Cronjob vorgenommen hat.
Ich dachte daran, ein Skript zu erstellen, um eine diff
Crontab mit einer zuvor gespeicherten Version auszuführen, damit ich zumindest sehen kann, was geändert wurde, aber ich dachte, dass es dafür vielleicht eine Standardlösung gibt. Was ist der beste Ansatz zur Verwaltung meiner Crontab?
Antwort1
Subversion
Ich würde den Inhalt der Crontab unter die Kontrolle von Subversion stellen und diesem Benutzer nur über den Zugriff gewähren sudo
. Insbesondere würde ich den Benutzern nur über den Zugriff auf einen Befehl erlauben, sudo
der den Header von Subversion nimmt und ihn als neueste Crontab für diesen bestimmten Benutzer installiert. Dadurch erhalten Sie Folgendes:
- Ein Prüfprotokoll, das zeigt, wer was getan hat
- Die Möglichkeit, bei Problemen zu einer vorherigen Crontab-Datei zurückzukehren
- Schützen Sie die Betreiber davor, zu viele Berechtigungen für dieses spezielle Konto zu erhalten
Es mag übermäßig kompliziert erscheinen, aber an meiner Beschreibung ist nichts allzu Kompliziertes, wenn Sie es in kleinere Abschnitte aufteilen.
MultiCron
Ein anderer Ansatz wäre die Verwendung eines Tools/Skripts wieMultiCron. Mit diesem Tool können Sie die Crontab-Daten außerhalb des Crontab-Eintrags verwalten, sodass Sie besser kontrollieren können, wer und wann Zugriff auf diese Änderungen hat.
Beispiel mit Subversion
Angenommen, Sie haben ein SVN-Repository eingerichtet, könnten Sie einen sudo
Eintrag erstellen, der es Benutzern ermöglicht, etwa Folgendes zu tun:
$ sudo deploy_app_cron.bash
Die Innereien dieses Skripts könnten unter anderem Folgendes bewirken:
svn cat file:///home/saml/svnrepo/app_cron_data.txt | crontab -u saml -
Der Inhalt der Datei app_cron_data.txt
:
$ svn cat file:///home/saml/svnrepo/app_cron_data.txt
*/5 * * * * /path/to/job -with args"
Beispiel für eine Nutzungsschleife
BenutzerA möchte also den Crontab-Eintrag aktualisieren. Dazu würde er Folgendes tun:
$ cd $HOME/somedir
$ svn co file:///home/saml/svnrepo/ mywksp
A mywksp/app_cron_data.txt
$ cd mywksp
Jetzt nehmen sie einige Änderungen an der Crontab-Datei vor app_cron_data.txt
und übertragen sie in das Repo, wenn sie fertig sind.
$ svn commit -m "some msg.." app_cron_data.txt
Um diese Änderungen bereitzustellen, führen Sie diesen sudo
Befehl aus:
$ sudo deploy_app_cron.bash
Verweise
Antwort2
Die richtige Lösung besteht darin, Cron richtig zu verwenden und jedem Benutzer seine eigene benutzerspezifische Crontab zu geben. Gibt es einen unerwähnten Grund, warum Sie Crontabs auf diese Weise einrichten würden? Es könnte sogar besser sein, benutzerspezifische Crontabs und andere Workarounds zu verwenden, um das zu umgehen, was diese „einheitliche Crontab“ eigentlich überwinden soll …?