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.

Ich arbeite mit SLES 11 SP2- und SP3-Systemen

Dinesh
quelle
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.

Gilles 'SO - hör auf böse zu sein'
quelle
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:

crontab -l -u [username] >/tmp/[username].cron.tmp
crontab -r -u [username]

und wieder aktivieren:

crontab -u [username] /tmp/[username].cron.tmp

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).

Braindigitalis
quelle
0

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

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.

Wadih M.
quelle
0

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.

Felix Domestica
quelle
3
Da dies cron für alle Benutzer deaktiviert, wird die Frage nicht wirklich beantwortet.
Scott
-1

Ich stimme zu, der Weg über systemctl ist derjenige, den man nehmen muss. Auf Himbeere wären Zehenbefehle

sudo systemctl stop cron.service
sudo systemctl start cron.service
Jürgen
quelle
1
Dies stoppt den gesamten cronDienst. Das OP wollte in der Lage sein, die Crontabs der Benutzer zu deaktivieren.
Roaima
1
Es ist auch identisch mit einer anderen Antwort.
Roaima