Wie kann ich die Cronjobs eines Benutzers vorübergehend deaktivieren?
14
Wie deaktiviere ich vorübergehend den Cron-Job eines oder mehrerer Benutzer? Insbesondere möchte ich die Cron-Rechte des Benutzers nicht aussetzen - lediglich keine seiner Jobs entlassen.
Können Sie nicht einfach -u userdie crontabBefehlsschaltfläche verwenden und #den Jobs ein Kommentarzeichen voranstellen, um sie für den angegebenen Benutzer zu deaktivieren?
Janis
@ Janis dann muss ich verfolgen, was der Benutzer (es gibt viele) bereits auskommentiert hatte, und der Benutzer kann fortfahren und eine andere Sache hinzufügen (ich füge sie nicht zu /etc/cron.deny hinzu). Zu viel Handarbeit :(
Dinesh
Dinesh, ich habe (falsch) verstanden, dass Sie eine feinkörnige Kontrolle darüber wünschen, was Sie deaktivieren.
Janis,
Antworten:
10
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernamesollte den Trick machen. Wiederherstellen mit chmod 600und touch(Sie müssen die Zeit der Datei ändern, damit cron sie erneut lädt).
Zumindest bei Debian und wahrscheinlich bei Vixie cron im Allgemeinen ist dies chmod 400 /var/spool/cron/crontabs/$usernameebenfalls der Trick, da diese Implementierung darauf besteht, dass die Berechtigungen genau 600 betragen. Dies dauert jedoch nur so lange, bis der Benutzer den crontabBefehl ausführt.
Wenn Sie einen robusten Weg suchen, gibt es meines Erachtens nichts Besseres, als die Crontab vorübergehend aus dem Weg zu räumen oder die Berechtigungen zu ändern und sie vorübergehend hinzuzufügen /etc/cron.deny.
Vielen Dank. Auf meinem System ist es / var / spool / cron / tabs / $ username. Aber es funktioniert immer noch, auch nach dem chmod.
Dinesh
Nachdem ich die Dateiberechtigungen geändert hatte, musste ich auch cron stoppen / neu starten. Ich dachte, es ist wahrscheinlich, weil cron das Zeug in Erinnerung behalten könnte. Also habe ich touch $usernamenach dem hinzugefügt chmod. Aber das hat nicht geholfen. (Übrigens hast du Recht cron.deny)
Dinesh
@Dinesh In der Tat müssen Sie die M-Zeit der Datei aktualisieren, sonst glaubt cron, dass sie sich nicht geändert hat und speichert die zwischengespeicherten Informationen. Ich habe das gestern beim Testen bemerkt, habe aber vergessen, es in meiner Antwort zu erwähnen, tut mir leid.
Gilles 'SO- hör auf böse zu sein'
Wenn Sie für alle Standardbenutzer nur deaktivieren möchten:chgrp root /var/spool/cron/crontabs
Shrimpwagon
9
Wie wäre es mit so etwas, um einen Benutzer crontab zu deaktivieren:
Ein Cron-Job-Dateiname darf keine Punkte oder Pluszeichen (. Oder +) enthalten, da dies dazu führt, dass Cron die Datei ignoriert. Anstelle von sollten Unterstriche (_) verwendet werden. und + Zeichen.
Wenn Sie nur alle cronJobs für eine Weile vollständig stoppen möchten, z. B. während der Systemwartung, mit der sie möglicherweise schlecht interagieren, sind die Befehle normalerweise
systemctl stop crond.service
und wieder aufzunehmen
systemctl start crond.service
Ich nehme an, Sie benötigen Root- oder Wheel-Berechtigungen, um diese auszuführen. Führen Sie sie bei Bedarf über sudo aus oder melden Sie sich als root an (letzter Ausweg).
Overkill für die spezifische gestellte Frage, bietet aber "One-Stop-Shopping" und erfordert kein Spielen mit dem Dateisystem oder temporären Dateien.
-u user
diecrontab
Befehlsschaltfläche verwenden und#
den Jobs ein Kommentarzeichen voranstellen, um sie für den angegebenen Benutzer zu deaktivieren?Antworten:
touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$username
sollte den Trick machen. Wiederherstellen mitchmod 600
undtouch
(Sie müssen die Zeit der Datei ändern, damit cron sie erneut lädt).Zumindest bei Debian und wahrscheinlich bei Vixie cron im Allgemeinen ist dies
chmod 400 /var/spool/cron/crontabs/$username
ebenfalls der Trick, da diese Implementierung darauf besteht, dass die Berechtigungen genau 600 betragen. Dies dauert jedoch nur so lange, bis der Benutzer dencrontab
Befehl ausführt.Wenn Sie einen robusten Weg suchen, gibt es meines Erachtens nichts Besseres, als die Crontab vorübergehend aus dem Weg zu räumen oder die Berechtigungen zu ändern und sie vorübergehend hinzuzufügen
/etc/cron.deny
.quelle
chmod
.touch $username
nach dem hinzugefügtchmod
. Aber das hat nicht geholfen. (Übrigens hast du Rechtcron.deny
)chgrp root /var/spool/cron/crontabs
Wie wäre es mit so etwas, um einen Benutzer crontab zu deaktivieren:
und wieder aktivieren:
Dies hat den zusätzlichen Vorteil, dass Sie es als dieser Benutzer ausführen können, ohne root zu benötigen (entfernen Sie einfach den Parameter -u).
quelle
Wenn Sie Debian verwenden, gilt dies nur für Debian AFAIK :
Sie können dies tun, indem Sie dem Namen des Cronjobs einen Punkt hinzufügen.
Auf das Verhalten wird in den offiziellen Debian-Dokumenten verwiesen:
https://www.debian.org/doc/debian-policy/#cron-job-file-names
quelle
Wenn Sie nur alle
cron
Jobs für eine Weile vollständig stoppen möchten, z. B. während der Systemwartung, mit der sie möglicherweise schlecht interagieren, sind die Befehle normalerweiseund wieder aufzunehmen
Ich nehme an, Sie benötigen Root- oder Wheel-Berechtigungen, um diese auszuführen. Führen Sie sie bei Bedarf über sudo aus oder melden Sie sich als root an (letzter Ausweg).
Overkill für die spezifische gestellte Frage, bietet aber "One-Stop-Shopping" und erfordert kein Spielen mit dem Dateisystem oder temporären Dateien.
quelle
Ich stimme zu, der Weg über systemctl ist derjenige, den man nehmen muss. Auf Himbeere wären Zehenbefehle
quelle
cron
Dienst. Das OP wollte in der Lage sein, die Crontabs der Benutzer zu deaktivieren.