Wie kann ich meine Crontab effektiv verwalten, um Probleme durch mehrere Aktualisierungen durch mehrere Benutzer zu vermeiden?

Wie kann ich meine Crontab effektiv verwalten, um Probleme durch mehrere Aktualisierungen durch mehrere Benutzer zu vermeiden?

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 diffCrontab 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, sudoder 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 sudoEintrag 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.txtund ü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 sudoBefehl 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 …?

verwandte Informationen