¿Puede cron escribir la salida del trabajo en un registro * por defecto * (en lugar de correo)?

23

Todos sabemos que la forma correcta de manejar la salida de los trabajos cron es redirigirla a un archivo:

0 * * * * /bin/date >> /var/log/date.log 2>&1

Sin embargo, a veces los administradores son vagos, olvidadizos o ignorantes y no ponen esos redireccionamientos; en este caso, la salida del trabajo se envía por correo a $ MAILTO o al usuario propietario o root. En algunos de los cuadros que administro, el correo está deshabilitado, por lo que esta salida entra en un agujero negro. Lo que me pregunto es, ¿hay alguna forma de decirle a cron que tome cualquier salida de trabajo y, en lugar de enviarlo por correo, lo arroje a un archivo de registro general en alguna parte? Estoy usando Ubuntu (8.04 pero migrando a 9.04). Hay una pista de tal solución en este resultado aleatorio de Google , pero creo que el OP podría haber estado confundido sobre la salida cron frente a la salida de los trabajos cron.

Estoy abierto a soluciones que implican un poco de secuencias de comandos o pirateo, pero idealmente este sería un bit de configuración que podría establecer en algún lugar. No veo ninguna pista man cron. ¡Gracias!

Puntilla
fuente

Respuestas:

1

Para croniecron (que recomienda Gentoo Handbook, por ejemplo), hay un argumento "-s" para la llamada cron, que envía la salida del trabajo al registro del sistema mediante syslog.

Tomáš Diviš
fuente
3

La respuesta corta es no, cron envía al propietario del crontab por diseño. En el cron estándar no hay forma de cambiar esto.

Lo mejor que se me ocurre es configurar los MTA en las máquinas donde desea que este comportamiento descargue el correo en un archivo de registro en lugar de un buzón de usuario.

Kamil Kisiel
fuente
3

No estoy seguro de qué quiere decir exactamente cuando dice "el correo está deshabilitado". ¿Pero tal vez podrías configurar un alias /etc/aliasesque se dirija a una tubería? Algo como

root: "|/bin/cat >> /var/log/cron.log"
innaM
fuente
root: /var/log/cron.logno funciona feep.net/sendmail/tutorial/intro/aliases.html
endolith
Tampoco nada por mí.
endolito
Es posible que solo funcionen si está ejecutando sendmail como su MTA. Esto se está volviendo menos común. (¡Sí, sé que estoy respondiendo a un comentario de 5 años!)
Alex L
2

No creo que lo que estás pidiendo sea realmente posible con Ubuntu (o cualquier otro) cron.

Además de la idea de geekmonkeys, también puede configurar $ MAILTO en una cuenta local y enrutar la salida a través de procmail.

Adán
fuente
1

Nunca escuché de tal configuración para cron, así que tomaría la ruta de scripting.

Cree un trabajo cron para patrullar / var / spool / cron / * y agregue la redirección a cualquier trabajo que no tenga uno.

geekmonkey
fuente
1

Otra opción sería crear un script de shell llamado cron_wrapper o algo así, y hacer que haga algo como esto:

#! / bin / sh

eval "$ * >> /var/log/cronlog.log"
salir $?

Entonces, todos tus crontabs solo necesitan algo como esto:

* * * * * / usr / local / bin / cron_wrapper echo hola

Tenga en cuenta que no he probado este código, es solo una idea.

Justin Ellison
fuente
1
Eso no resuelve el problema. Si las personas no recuerdan configurar MAILTO o redirigir stdout a un archivo, no recordarán ejecutar cosas a través del contenedor.
Kamil Kisiel
1

No sé cuál es el "cron estándar". Hay muchos demonios cron, diferentes distribuciones usan diferentes. Vixie cron se despliega más ampliamente, así que eso es probablemente lo que querías decir. Pero en algunas distribuciones, no sería el predeterminado.

Me hice cargo del desarrollo del cron de Dillon (dcron), que es el predeterminado en Arch Linux. Otras distribuciones también lo usan, pero no sé si es el predeterminado en otro lugar. dcron tiene una opción de invocación -Mpara especificar que desea utilizar un script personalizado en lugar de sendmail. Se llama al script sin argumentos y con algunos encabezados de correo electrónico y la &>salida de cualquier cronjobs como stdin. (Si no hay &>salida, el script no se llama).

dubiousjim
fuente
1

¿Por qué no configuramos MAILTO = "" en particular crontab del usuario? Esto deshabilitará el registro de mensajes de correo en / var / spool / mail /

lalit
fuente