Comment obtenir une liste de toutes les tâches cron planifiées sur ma machine?

201

Mon administrateur système a configuré de nombreuses tâches cron sur ma machine. Je voudrais savoir exactement ce qui est prévu pour quelle heure. Comment puis-je obtenir cette liste?

Franc
la source
3
Ce n'est pas la réponse à la question, mais juste une note sur les meilleures pratiques. On peut les configurer comme des tâches cron par utilisateur pour rootou apacheautre, mais il faut utiliser /etc/crontabou (mieux, dans la plupart des distributions) /etc/cron.det /etc/cron.[timeframe].
Mattdm
J'ai posté un script qui automatise cela de manière utile à l' adresse suivante : - stackoverflow.com/questions/134906/… Ce n'est pas parfait, mais couvre probablement 90% des besoins. C'est un bon exemple de ce qu'il ne faut pas écrire en bash.
David Collier

Réponses:

143

Selon la configuration de votre système Linux, vous pouvez regarder dans:

  • /var/spool/cron/* (crontabs utilisateur)
  • /etc/crontab (crontab à l'échelle du système)

de plus, de nombreuses distributions ont:

  • /etc/cron.d/* Ces configurations ont la même syntaxe que /etc/crontab

  • /etc/cron.hourly, /etc/cron.daily, /etc/cron.weekly,/etc/cron.monthly

Il s’agit simplement de répertoires contenant des exécutables exécutés toutes les heures, tous les jours, toutes les semaines ou tous les mois, en fonction de leur nom de répertoire.

En plus de cela, vous pouvez avoir des emplois (vérifier /var/spool/at/*), anacron ( /etc/anacrontabet /var/spool/anacron/*) et probablement d'autres que j'oublie.

jsbillings
la source
4
Merci, je les ai trouvés dans /etc/cron.daily. Comment fonctionne ce dailyfichier? A quelle heure vont les travaux quotidiens? Sur ma machine, ils semblent courir vers midi, mais il aimerait dire à mon administrateur système comment régler le problème sur minuit.
Frank
5
Par /etc/crontabexemple, sur mon système Ubuntu, cron.daily est appelé : 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )ce qui signifie 6h25.
Kowh
cron.daily est également appelé depuis / etc / crontab sur mon système RHEL5, si vous souhaitez davantage de points de données.
jsbillings
Sur Fedora plus récent (et probablement RHEL6 - n’a pas encore regardé), le croniedémon s’occupe de ceux qui utilisent la configuration dans /etc/anacrontab.
Mattdm
Parfois, c'est /var/cronaussi.
CMCDragonkai
135

Avec la plupart des Crons (par exemple, Vixie-Cron - Debian / Ubuntu par défaut, Cronie - Fedora par défaut, Solaris Cron ...), vous obtenez la liste des tâches cron planifiées pour l'utilisateur actuel via:

$ crontab -l

ou pour un autre utilisateur via

# crontab -l -u juser

Pour obtenir les crontabs pour tous les utilisateurs, vous pouvez parcourir tous les utilisateurs et appeler cette commande.

Alternativement, vous pouvez rechercher les fichiers de spool. Habituellement, ils sont enregistrés sous /var/spool/cron, par exemple pour le répertoire suivant vcron

/var/spool/cron/crontabs

contient toutes les crontabs configurées de tous les utilisateurs - à l'exception de l'utilisateur root qui est également capable de configurer des travaux via la crontab à l'échelle du système, située à l'emplacement suivant:

/etc/crontab

Avec cronie (par défaut sur Fedora / CentOS), il existe également un .drépertoire de configuration de style pour les tâches système:

/etc/cron.d

(Comme toujours, le .drépertoire simplifie la gestion des entrées de configuration appartenant à différents packages.)

Pour plus de commodité, la plupart des distributions fournissent également un répertoire dans lequel les scripts liés / stockés sont exécutés périodiquement, par exemple:

/etc/cron.daily
/etc/cron.hourly
/etc/cron.monthly
/etc/cron.weekly

L’exécution en temps voulu de ces scripts est généralement gérée via des run-partsentrées dans la crontab du système ou via anacron .

Avec Systemd (par exemple sur Fedora, CentOS 7, ...), l'exécution périodique de travaux peut également être configurée via des unités de temporisation . Les minuteries système activées peuvent être affichées via:

$ systemctl list-timers

Notez que les utilisateurs situés à côté de root peuvent également disposer d'instances utilisateur systemd où les minuteries sont configurées. Par exemple, sous Fedora, par défaut, une instance utilisateur systemd est démarrée pour chaque utilisateur actuellement connecté. Elles peuvent être reconnues via:

$ ps aux | grep 'systemd[ ]--user'

Ces timers utilisateur peuvent être listés via:

$ systemctl --user list-timers

Une alternative à l'émission de la list-timerscommande consiste à rechercher des fichiers d'unité de la minuterie (modèle:) *.timeret des liens symboliques vers ceux-ci dans les répertoires système et utilisateur systemd config habituels:

$ find /usr/lib/systemd/ /etc/systemd -name '*.timer'
$ find /home '(' -path '/home/*/.local/share/systemd/user/*' \
              -o -path '/home/*/.config/systemd/*' ')' \
      -name '*.timer'  2> /dev/null

(Comme avec les unités de service normales, une unité de minuterie est activée via la création d'un lien symbolique dans le bon répertoire de configuration systemd.)

Voir également:

maxschlepzig
la source
Je n'ai pas voté. Mais je viens d’essayer crontab -l -u root(parce que ces tâches que je veux savoir sur run run root), et il est dit que je n’ai pas de privilèges à utiliser -u.
Frank
3
Ensuite, vous devez l'appeler avec suffisamment de privilèges, c'est-à-dire en tant rootqu'utilisateur.
maxschlepzig
2
Toujours pas terminé - certaines versions de cron exécutent les travaux depuis /etc/cron.d et /etc/cron.{daily ,hourly,monthly,weekly} sans programme d'aide appelé depuis / etc / crontab.
Mattdm
2
@ maxschlepzig - mais pas toujours. Et la question est "comment puis-je obtenir une liste de tous les emplois cron"; une réponse qui est "bien, voici certains d'entre eux" n'est pas la réponse.
Mattdm
1
@maxschlepzig - cronie, tel qu’expédié dans Fedora et RHEL6, ne fait pas référence à ceux qui figurent dans /etc/crontab, mais les utilise /etc/anacrontab. Je peux me tromper à propos de toute implémentation réelle qui ne fait pas référence à cela dans aucun fichier de configuration. (Mais ensuite, je n'ai pas eu de
vote négatif
5

Pour lister tous les crons pour l'utilisateur donné.

crontab -u nom d'utilisateur -l;

Pour lister tous les crons pour tous les utilisateurs

Exécutez-le en tant que super utilisateur

#!/bin/bash
#List all cron jobs for all users
for user in `cat /etc/passwd | cut -d":" -f1`;
do 
crontab -l -u $user;
done
Manikandan Arunachalam
la source
1
OP demande une liste de tous les travaux cron.
Drav Sloan
1
Pour une raison quelconque, cela ne montre pas /etc/cron.d/ jobs.
Jamshid
Ça ne fonctionne pas. "pas de crontab pour www-data". mais le nom d'utilisateur www-data is existe.
mishanon