desarrollo-web-br-bd.com

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

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?

215
Frank

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

  • /var/spool/cron/* (crontabs de usuario)
  • /etc/crontab (crontab de 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 los trabajos (marque /var/spool/at/*), anacron (/etc/anacrontab y /var/spool/anacron/*) y probablemente otros que estoy olvidando.

150
jsbillings

Con la mayoría de Crons (por ejemplo, Vixie-Cron - Debian/Ubuntu predeterminado, Cronie - Fedora predeterminado, Solaris Cron ...) obtiene 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, p.ej. 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), hay un .d directorio de configuración de estilo para trabajos cron del sistema, también:

/etc/cron.d

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

Por conveniencia, la mayoría de las distribuciones también proporcionan un directorio 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 administra a través de run-parts entradas en el sistema crontab o vía anacron .

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

$ systemctl list-timers

Tenga en cuenta que los usuarios junto a 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 de list-timers el comando es buscar archivos de unidad de temporizador (patrón: *.timer) y enlaces simbólicos a ellos en el sistema habitual y los directorios de configuración systemd de 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:

149
maxschlepzig

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