¿Cómo puedo obtener una lista de todos los trabajos cron programados en mi máquina?

201

Mi administrador del sistema ha configurado un montón de trabajos cron en mi máquina. Me gustaría saber exactamente qué está programado para qué hora. ¿Cómo puedo obtener esa lista?

Franco
fuente
3
Esta no es la respuesta a la pregunta, sino solo una nota sobre las mejores prácticas. Uno puede configurarlos como trabajos cron por usuario para rooto apachelo que sea, pero uno debe usar /etc/crontabo (mejor, en la mayoría de las distribuciones) /etc/cron.dy /etc/cron.[timeframe].
mattdm
He publicado un script que automatiza esto en un grado útil en: stackoverflow.com/questions/134906/… No es perfecto, pero probablemente cubre el 90% de las necesidades. Es un buen ejemplo de lo que no se debe escribir en bash.
David Collier

Respuestas:

143

Dependiendo de cómo esté configurado su sistema Linux, puede buscar en:

  • /var/spool/cron/* (crontabs de usuario)
  • /etc/crontab (crontab en todo el sistema)

Además, muchas distribuciones tienen:

  • /etc/cron.d/* Estas configuraciones tienen la misma sintaxis que /etc/crontab

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

Estos son simplemente directorios que contienen ejecutables que se ejecutan cada hora, diariamente, semanalmente o mensualmente, por su nombre de directorio.

Además de eso, puede tener en puestos de trabajo (cheque /var/spool/at/*), anacron ( /etc/anacrontaby /var/spool/anacron/*) y probablemente otros que estoy olvidando.

jsbillings
fuente
44
Gracias, los encontré en /etc/cron.daily. ¿Cómo funciona ese dailyarchivo? ¿A qué hora se ejecutarán los trabajos diarios? En mi máquina parecen funcionar alrededor del mediodía, pero me gustaría decirle a mi administrador de sistemas cómo cambiar eso a la medianoche.
Frank
55
Se llama a cron.daily desde /etc/crontab, por ejemplo, en mi sistema Ubuntu es: lo 25 6 * * * root test -x /usr/sbin/anacron || ( cd / && run-parts --report /etc/cron.daily )que significa 6:25 am.
Kowh
cron.daily también se llama desde / etc / crontab en mi sistema RHEL5, si desea más puntos de datos.
jsbillings
En Fedora más reciente (y probablemente RHEL6, aún no se ha visto), el croniedemonio se encarga de aquellos que usan la configuración /etc/anacrontab.
mattdm
A veces también está adentro /var/cron.
CMCDragonkai
135

Con la mayoría de los Crons (por ejemplo, Vixie-Cron - Debian / Ubuntu por defecto, Cronie - Fedora por defecto, Solaris Cron ...) obtienes la lista de trabajos cron programados para el usuario actual a través de:

$ crontab -l

o para otro usuario a través de

# crontab -l -u juser

Para obtener los crontabs para todos los usuarios, puede recorrer todos los usuarios y llamar a este comando.

Alternativamente, puede buscar los archivos de spool. Por lo general, se guardan en /var/spool/cron, por ejemplo, para vcron siguiendo el directorio

/var/spool/cron/crontabs

contiene todos los crontabs configurados de todos los usuarios, excepto el usuario raíz que también puede configurar trabajos a través del crontab de todo el sistema, que se encuentra en

/etc/crontab

Con cronie (predeterminado en Fedora / CentOS), también hay un .ddirectorio de configuración de estilo para trabajos cron del sistema:

/etc/cron.d

(Como siempre, el .ddirectorio simplifica el mantenimiento de las entradas de configuración que forman parte de diferentes paquetes).

Por conveniencia, la mayoría de las distribuciones también proporcionan directorios donde los scripts vinculados / almacenados se ejecutan periódicamente, por ejemplo:

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

La ejecución oportuna de esos scripts generalmente se gestiona mediante run-partsentradas en el crontab del sistema o mediante anacron .

Con Systemd (por ejemplo, en Fedora, CentOS 7, ...), la ejecución periódica de trabajos se puede configurar adicionalmente a través de unidades de temporizador . Los temporizadores del sistema habilitados se pueden mostrar a través de:

$ systemctl list-timers

Tenga en cuenta que los usuarios además de root pueden tener instancias de systemd de usuario ejecutándose donde los temporizadores también están configurados. Por ejemplo, en Fedora, de manera predeterminada, se inicia una instancia de systemd de usuario para cada usuario que actualmente está conectado. Se pueden reconocer a través de:

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

Esos temporizadores de usuario se pueden enumerar a través de:

$ systemctl --user list-timers

Una alternativa a la emisión del list-timerscomando es buscar archivos de unidad de temporizador (patrón *.timer:) y enlaces simbólicos a ellos en el sistema habitual y en los directorios de configuración del sistema del usuario:

$ 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

(Al igual que con las unidades de servicio normales, se habilita una unidad de temporizador mediante la creación de un enlace simbólico en el directorio de configuración correcto de systemd).

Ver también:

maxschlepzig
fuente
No voté en contra. Pero acabo de intentarlo crontab -l -u root(porque esos cronjobs sobre los que quiero saber se ejecutan root), y dice que no tengo privilegios para usar -u.
Frank
3
Luego debe llamarlo con suficientes privilegios, es decir, como rootusuario.
maxschlepzig
2
Todavía no está completo: algunas versiones de cron ejecutan trabajos desde /etc/cron.d y /etc/cron.{daily,hourly,monthly,weekly} sin un programa auxiliar llamado desde / etc / crontab.
mattdm
2
@maxschlepzig, pero no siempre. Y la pregunta es "¿cómo puedo obtener una lista de todos los trabajos cron"; una respuesta que es "bueno, aquí hay algunos de ellos" no es la respuesta.
mattdm
1
@maxschlepzig - cronie, como se envía en Fedora y RHEL6, no se refiere a los que están en /etc/crontab, sino que los usa /etc/anacrontab. Puedo estar equivocado acerca de cualquier implementación real que no se refiera a ellas en ningún archivo de configuración. (Pero tampoco voté en contra ... solo digo.)
mattdm
5

Para enumerar todos los crons para el usuario dado.

crontab -u nombre de usuario -l;

Para enumerar todos los crons para todos los usuarios

Ejecútalo como un superusuario

#!/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
fuente
1
OP está pidiendo una lista de todos los trabajos cron.
Drav Sloan el
1
Por alguna razón, eso no muestra /etc/cron.d/ jobs.
jamshid el
No funciona. "no hay crontab para www-data". pero el nombre de usuario www-data existe.
mishanon