¿Hay un comando o un script existente que me permita ver todos los trabajos cron programados de un sistema * NIX a la vez? Me gustaría que incluyera todos los crontabs de usuario, así como /etc/crontab
, y lo que sea que haya /etc/cron.d
. También sería bueno ver los comandos específicos ejecutados run-parts
en /etc/crontab
.
Idealmente, me gustaría la salida en una buena columna y ordenada de alguna manera significativa.
Luego podría fusionar estos listados de múltiples servidores para ver el "cronograma de eventos" general.
Estaba a punto de escribir ese guión yo mismo, pero si alguien ya se ha tomado la molestia ...
Respuestas:
Tendría que ejecutar esto como root, pero:
recorrerá cada nombre de usuario con su crontab. Los crontabs son propiedad de los respectivos usuarios, por lo que no podrá ver el crontab de otro usuario sin ser ellos o root.
Edite si desea saber a qué usuario pertenece un crontab, use
echo $user
fuente
for user in $(getent passwd | cut -f1 -d: ); do echo $user; crontab -u $user -l; done
for user in $(cut -f1 -d: /etc/passwd); do crontab -u $user -l 2>/dev/null | grep -v '^#'; done
for user in $(getent passwd | awk -F : '{print $1}'); do echo $user; crontab -u $user -l; done
/etc/cron.hourly/
,/etc/cron.daily/
,/etc/cron.weekly/
,/etc/cron.monthly/
...?Terminé escribiendo un guión (estoy tratando de enseñarme a mí mismo los puntos más finos de las secuencias de comandos bash, así que por eso no ves algo como Perl aquí). No es exactamente un asunto simple, pero hace la mayor parte de lo que necesito. Utiliza la sugerencia de Kyle para buscar crontabs de los usuarios individuales, sino que también se ocupa de
/etc/crontab
(incluyendo las secuencias de comandos lanzados porrun-parts
en/etc/cron.hourly
,/etc/cron.daily
, etc.) y los puestos de trabajo en el/etc/cron.d
directorio. Toma todos esos y los fusiona en una pantalla similar a la siguiente:Tenga en cuenta que muestra al usuario, y más o menos ordena por hora y minuto para que pueda ver la programación diaria.
Hasta ahora, lo he probado en Ubuntu, Debian y Red Hat AS.
fuente
<' showcrons.sh: line 59:
hecho <<(cut --fields = 1 --delimiter =: / etc / passwd) '/etc/anacrontab
En Ubuntu o Debian, puede ver crontab por
/var/spool/cron/crontabs/
y luego hay un archivo para cada usuario. Eso es solo para crontab específicos del usuario, por supuesto.Para Redhat 6/7 y Centos, el crontab está debajo
/var/spool/cron/
.fuente
/etc/passwd
. En mi opinión, esta debería ser la respuesta aceptada, en lugar de todas las soluciones de fuerza bruta.Esto mostrará todas las entradas de crontab de todos los usuarios.
fuente
Depende de tu versión de Linux pero yo uso:
como raíz Muy simple y muy corto.
Me da salida como:
fuente
tail -n +1 /var/spool/cron/*
para enumerar todo el contenido de los archivos.sudo sh -c 'tail -n +1 /var/spool/cron/*'
si no quieres convertirte en root. Mi TOC me obligó a investigar por qué no podía sudo este comando tal como está escrito. Fue porque los usuarios habituales no tienen acceso al directorio / var / spool / cron, y el glob se estaba interpretando como un personaje estrella literal, que obviamente no existe.cd /var/spool/cron/cron/ && grep . *
también imprimirá el nombre de usuario correspondiente delante de cada trabajo cronUn pequeño refinamiento de la respuesta de Kyle Burton con un formato de salida mejorado:
fuente
Esto evita meterse con passwd directamente, omite a los usuarios que no tienen entradas cron y para aquellos que las tienen, imprime el nombre de usuario y su crontab.
Sin embargo, la mayoría de las veces dejo esto aquí para poder encontrarlo más tarde en caso de que necesite volver a buscarlo.
fuente
/etc/passwd
. La solución anterior de Matt es más apropiada para esta situación particular, pero es bueno saber que existe el comando.Si marca un clúster utilizando NIS, la única forma de ver si un usuario tiene una entrada crontab es según la respuesta de Matt / var / spool / cron / tabs.
fuente
Para obtener la lista del usuario ROOT.
fuente
Este script funcionó para mí en CentOS para enumerar todos los crons en el entorno:
fuente
cat /etc/passwd | sed 's/^\([^:]*\):.*$/echo "\ncrontab for \1:"; sudo crontab -u \1 -l 2>\&1/' | grep -v "no crontab for" | sh
ahorra un poco de tiempoMe gusta la respuesta simple de una sola línea de arriba:
Pero Solaris, que no tiene el indicador -u y no imprime al usuario que está comprobando, puede modificarlo así:
Obtendrá una lista de usuarios sin los errores arrojados por crontab cuando una cuenta no puede usar cron, etc. Tenga en cuenta que en Solaris, los roles también pueden estar en / etc / passwd (consulte / etc / user_attr).
fuente
fuente
Lo siguiente elimina los comentarios, las líneas vacías y los errores de los usuarios sin crontab. Todo lo que le queda es una lista clara de usuarios y sus trabajos.
Tenga en cuenta el uso de
sudo
en la segunda línea. Si ya eres root, elimina eso.Salida de ejemplo:
Lo uso en Ubuntu (12 a 16) y Red Hat (5 a 7).
fuente
Depende de tu versión de cron. Usando Vixie cron en FreeBSD, puedo hacer algo como esto:
si lo quiero más delimitado por tabulaciones, podría hacer algo como esto:
Donde esa es una pestaña literal en la porción de reemplazo de sed.
Puede ser más independiente del sistema recorrer a los usuarios
/etc/passwd
y hacercrontab -l -u $user
por cada uno de ellos.fuente
Gracias por este script muy útil. Tuve algunos pequeños problemas al ejecutarlo en sistemas antiguos (Red Hat Enterprise 3, que manejan de manera diferente egrep y pestañas en cadenas), y otros sistemas sin nada en /etc/cron.d/ (el script terminó con un error). Así que aquí hay un parche para que funcione en tales casos:
No estoy realmente seguro de que los cambios en el primer egrep sean una buena idea, pero bueno, este script ha sido probado en RHEL3,4,5 y Debian5 sin ningún problema. ¡Espero que esto ayude!
fuente
Construyendo sobre @Kyle
para evitar los comentarios generalmente en la parte superior de / etc / passwd,
Y en macosx
fuente
grep -v '^#
'en lugar de confiar en el número mágico11
?Creo que un mejor revestimiento estaría debajo. Por ejemplo, si tiene usuarios en NIS o LDAP, no estarán en / etc / passwd. Esto le dará los crontabs de cada usuario que haya iniciado sesión.
fuente
Puedes escribir para toda la lista de usuarios:
También puedes ir a
este archivo listará los horarios
fuente
Con disculpas y gracias a yukondude.
Traté de resumir la configuración de tiempo para una lectura fácil, aunque no es un trabajo perfecto, y no toco 'todos los viernes' o 'solo los lunes'.
Esta es la versión 10, ahora:
Ahora estoy publicando el guión completo aquí.
https://gist.github.com/myshkin-uk/d667116d3e2d689f23f18f6cd3c71107
fuente
Como se trata de recorrer un archivo (
/etc/passwd
) y realizar una acción, me falta el enfoque adecuado sobre ¿Cómo puedo leer un archivo (flujo de datos, variable) línea por línea (y / o campo por campo)? )? :Esto lee
/etc/passwd
línea por línea usando:
como delimitador de campo. Al decirread -r user _
, hacemos$user
retener el primer campo y_
el resto (es solo una variable basura para ignorar los campos).De esta manera, podemos llamar
crontab -u
usando la variable$user
, que citamos por seguridad (¿qué pasa si contiene espacios? Es poco probable en dicho archivo, pero nunca se puede saber).fuente
En Solaris, para un nombre de usuario conocido particular:
Todos los demás * Nix necesitarán un
-u
modificador:Para obtener todos los trabajos de los usuarios a la vez en Solaris, al igual que otras publicaciones anteriores:
fuente
Para mí, mirar / var / spool / cron / crontabs es la mejor manera
fuente
Este script genera el Crontab en un archivo y también enumera todos los usuarios que confirman aquellos que no tienen una entrada crontab:
fuente