Les Cron (tâches) sont rattachés à un utilisateur système sous le système d'exploitation Linux.
Par mesure de sécurité il est fortement conseillé d'exécuter ces crons sous un autre utilisateur que root. Dans le cas où vous faites de la maintenance sur des serveurs ne vous appartenant pas, cela devient vite un casse tête de trouver quel utilisateur exécute ces tâches ?
A titre de rappel, la commande pour lister les cron job de l'utilisateur courant :
# crontab -l
Pour lister les cron job d'un autre utilisateur que l'utilisateur courant :
# crontab -u nom_utilisateur -l
A condition toutefois d'avoir les droits de lecture sur le fichier, ce qui peut ne pas être le cas pour tous les utilisateurs.
Je vous propose de lister les tâches de tous les utilisateurs (listés dans /etc/passwd).
Définissons un alias depuis l'utilisateur root :
alias cronall='for user in $(cut -f1 -d: /etc/passwd); do echo -e "\n\n==> $user:" && crontab -u $user -l; done'
Il vous suffit ensuite de faire appel à cronall :
cronall ==> root: # m h dom mon dow command 30 23 * * * df >> test_blogmotion.fr ==> daemon: no crontab for daemon ==> bin: no crontab for bin ==> sys: no crontab for sys ==> sync: no crontab for sync ==> mail: no crontab for mail ==> www-data: no crontab for www-data ==> backup: no crontab for backup
Les tâches sont listées par utilisateur, plutôt pratique. Dans mon cas, seul l'utilisateur root possédait un cron job.
Attention : ce script ne fonctionne pas sur les crons périodiques (cron.daily, cron.weekly, etc.) qui sont dans des répertoires distincts et non liés à un utilisateur mais au système. Pour lister ces crons une commande simple suffira pour trouver ce que vous cherchez :
cat /etc/cron.d/* | grep "votre recherche"
De même que pour lister tous les scripts (sans le contenu) :
ls -al /etc/cron.*
Source d'inspiration du premier script
Tout envoyer vers un fichier
Si vous utilisez l'astuce dans un script, de sauvegarde par exemple, il est possible d'envoyer le retour dans un fichier :
for user in $(cut -f1 -d: /etc/passwd); do echo -e "\n\n==> $user:" ; crontab -u $user -l ; done > /tmp/crontab 2>&1
Auteur : Mr Xhark
Fondateur du blog et passionné par les nouvelles techno, suivez-moi sur twitter
7 commentaires
C'est une bonne info, mais j'utilise rarement cette commande en étant dans un environnement mono-utilisateur, mais c'est bon à savoir.
Pour ma part j'ai trouvé tres utile cette commande ! Grand merci 🙂
merci pour l'info, cela m'a permis aussi de découvrir la commande cut qui peut etre utile
Bonjour, je travaille dans un environnement de prod Linux, en tant qu'utilisateur non privilégié. Je n'ai donc pas droit au flag -u de la commande crontab. Je n'ai pas non plus accès au répertoire /var/spool/cron (particularité de RHEL, et d'Ubuntu aussi).
Les ingénieurs système refusent d'ouvrir l'accès à ce répertoire.
Avez-vous une solution miracle, car j'ai une quinzaine d'utilisateurs de production, et il m'est utile de surveiller que toutes les crontabs sont actives ?
Merci de vos réponses.
St33v0
@St33v0: Malheureusement sans droit je ne vois pas trop. Peut-être du côté du fichier sudoers ?
Simple et efficace!