(modifié le 3 décembre 2017 à 23:07)

cron-linuxLes 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