comment désactiver temporairement les tâches cron d'un utilisateur?

14

Comment désactiver temporairement une ou plusieurs tâches cron des utilisateurs? En particulier, je ne veux pas suspendre les droits cron de l'utilisateur - simplement ne pas licencier aucun de ses travaux.

Je suis sur les systèmes SLES 11 SP2 et SP3

Dinesh
la source
Ne pouvez-vous pas simplement utiliser le -u usercommutateur de la crontabcommande et mettre un #caractère de commentaire devant les travaux à désactiver pour l'utilisateur donné?
Janis
@Janis alors je dois garder une trace de ce que l'utilisateur (il y en a beaucoup) a déjà commenté, et l'utilisateur peut continuer et ajouter autre chose (je ne les ajoute pas à /etc/cron.deny). Trop de travail manuel :(
Dinesh
Dinesh, j'ai (mal) compris que vous vouliez un contrôle précis sur ce que vous désactivez.
Janis

Réponses:

10

touch /var/spool/cron/crontabs/$username; chmod 0 /var/spool/cron/crontabs/$usernamedevrait faire l'affaire. Restaurez avec chmod 600et touch(vous devez modifier le mtime du fichier pour que cron (tente de) le recharger).

Sur au moins Debian et probablement avec Vixie cron en général, fait chmod 400 /var/spool/cron/crontabs/$usernameégalement l'affaire, car cette implémentation insiste sur le fait que les autorisations sont exactement 600. Cependant, cela ne dure que jusqu'à ce que l'utilisateur exécute la crontabcommande.

Si vous voulez un moyen robuste, je ne pense pas qu'il y ait quelque chose de mieux que de déplacer temporairement leur crontab ou de changer les autorisations, et de les ajouter temporairement /etc/cron.deny.

Gilles 'SO- arrête d'être méchant'
la source
Merci. Sur mon système, il s'agit de / var / spool / cron / tabs / $ username. Mais il s'exécute toujours, même après le chmod.
Dinesh
Après avoir changé les perms de fichiers, j'ai également dû arrêter / redémarrer cron. Je pensais que c'était probablement parce que cron pouvait garder les trucs en mémoire. J'ai donc ajouté touch $usernameaprès le chmod. Mais cela n'a pas aidé. (btw a compris votre point de vue cron.deny)
Dinesh
@Dinesh En effet, vous devez mettre à jour le mtime du fichier, sinon cron pense qu'il n'a pas changé et conserve les informations en cache. J'ai remarqué cela lors des tests d'hier mais j'ai oublié de le mentionner dans ma réponse, désolé.
Gilles 'SO- arrête d'être méchant'
Si vous souhaitez désactiver pour tous les utilisateurs standard juste:chgrp root /var/spool/cron/crontabs
shrimpwagon
9

Que diriez-vous de quelque chose comme ça pour désactiver un utilisateur crontab:

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

et pour réactiver:

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

Cela a l'avantage supplémentaire que vous pouvez l'exécuter en tant qu'utilisateur sans avoir besoin de root (supprimez simplement le paramètre -u).

braindigitalis
la source
0

Si vous utilisez Debian, cela ne s'applique qu'à Debian AFAIK :

Vous pouvez le faire en ajoutant un point au nom du cronjob.

Le comportement est mentionné dans les documents officiels Debian:

https://www.debian.org/doc/debian-policy/#cron-job-file-names

Un nom de fichier de tâche cron ne doit pas inclure de point ni de caractère plus (. Ou +) car cela entraînerait l'ignorance du fichier par cron. Les traits de soulignement (_) doivent être utilisés à la place de. et + caractères.

Wadih M.
la source
0

Si vous voulez simplement arrêter tous les crontravaux pendant un certain temps - par exemple, pendant la maintenance du système avec laquelle ils pourraient mal interagir - les commandes sont normalement

systemctl stop crond.service

et, pour reprendre

systemctl start crond.service

Je suppose que vous avez besoin des droits root ou wheel pour les exécuter; si nécessaire, exécutez-les via sudo ou (dernier recours) connectez-vous en tant que root.

Trop pour la question spécifique posée, mais offre un "guichet unique" et ne nécessite pas de jouer avec le système de fichiers ou des fichiers temporaires.

Felix Domestica
la source
3
Comme cela désactive cron pour tous les utilisateurs, cela ne répond pas vraiment à la question.
Scott
-1

Je suis d'accord, le chemin via systemctl est celui à prendre. Sur la framboise, les commandes des orteils seraient

sudo systemctl stop cron.service
sudo systemctl start cron.service
Juergen
la source
1
Cela arrêtera tout le cronservice. L'OP voulait pouvoir choisir les crontabs des utilisateurs à désactiver.
roaima
1
C'est également identique à une autre réponse.
roaima