Crontab nunca se ejecuta mientras está en /etc/cron.d

32

Esto es lo que hice en Debian Jessie:

  • instalar cron a través de apt-get install cron
  • poner un backup_crontabarchivo en/etc/cron.d/

Sin embargo, la tarea nunca se está ejecutando.

Aquí hay algunos resultados:

/# crontab -l
no crontab for root

/# cd /etc/cron.d && ls
backup_crontab

/etc/cron.d# cat backup_crontab
0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

¿Hay algo que hacer para activar un crontab en particular, o para activar el "servicio" cron en sí mismo?

Jivan
fuente
44
¿Qué sucede si se está ejecutando y falla con un error que no puede ver porque está redirigiendo toda la salida a / dev / null? :)
tink
@tink ¿es posible agregar la salida al final de un archivo?
Jivan
2
seguro es; 0,15,30,45 * * * * /backup.sh >> / tmp / testing_cron.out 2> & 1
tink
@Jivan, solo una pequeña nota: ls /etc/cron.des equivalente a cd /etc/cron.d && lsen términos de producción. La única diferencia es que el directorio de trabajo no cambiará.
Drew Chapin el

Respuestas:

49

Los archivos que /etc/cron.dnecesitan también enumeran al usuario con el que se ejecutará el trabajo.

es decir

0,15,30,45 * * * * root /backup.sh >/dev/null 2>&1

También debe asegurarse de que los permisos y el propietario: el grupo estén configurados correctamente ( -rw-r--r--y sean propiedad de root:root)

Stephen Harris
fuente
16
crontab -linforma sobre las entradas cron en /var/spool/cron/crontabs/, es decir, las crontabs por usuario . /etc/cron.dlos archivos son crontabs del sistema y no son reportados por crontab -l.
Stephen Harris
55
En realidad, mencioné que no estaba funcionando, pero me di cuenta de que es después de haber agregado rootel archivo, simplemente crontab -lno lo mencioné, ya que explicaste por qué, gracias por tu ayuda
Jivan
99
Parece que también el nombre de archivo tiene un papel. En mi caso, agregué etc/cron.dun archivo con un punto en el medio del nombre y el trabajo nunca se ejecutó hasta que le
cambié el
20
El mismo problema aquí, guiones "-" en el nombre del archivo, cambiándolos a guiones bajos "_" resolvió el problema, los trabajos se ejecutaron de inmediato.
Rob
1
También tuve una carrera ... ¿qué demonios ... por qué? De todos modos, gracias @Rob
Nikolay Dimitrov
8

Otra cosa que he observado es que el archivo /etc/cron.dno puede tener una extensión. En mi caso particular, tenía un enlace simbólico:

# my-job.crontab
* * * * * root echo "my job is running!" >> /tmp/my-job.log

$: ln -sf /home/me/my-job.crontab /etc/cron.d/
# This did not work -> job would not run

$: ln -sf /home/me/my-job.crontab /etc/cron.d/my-job
# This did work -> job ran fine

La restricción de nombre de archivo se documenta en la página man de run-part: http://manpages.ubuntu.com/manpages/xenial/man8/run-parts.8.html , se puede pasar una opción --regex para anular el formato del archivo.

Sin embargo, el comportamiento predeterminado de cron se mantuvo sin extensiones, vea los comentarios en: https://bugs.launchpad.net/ubuntu/+source/debianutils/+bug/38022

rodrigo-silveira
fuente
Hombre, me salvaste el día!
elboletaire
2
Esto es correcto en Ubuntu (tal vez en todas las distribuciones derivadas de Debian). En Amazon Linux (y tal vez en todas las distribuciones derivadas de Redhat), puede tener un punto en el nombre del archivo. Gracias Unix.SE.
Ley29
Acabo de comprobar un Debian puro, y los puntos tampoco funcionan allí. Los guiones funcionan (a diferencia de lo que dice un comentario anterior).
Ley29
4

Creo que probablemente te falta una línea en blanco necesaria desde el final de tu archivo cron. Tuve el mismo problema, pero después de verificar todo lo enumerado aquí (permisos de usuario, nombre de archivo, versión cron, etc.), me di cuenta de que no tenía un salto de línea después de la última entrada en mi /etc/cron.d/own_crony eso hace que se ignore todo el archivo.

slac1024
fuente
2

Si eres el único usuario en esta computadora, es posible que quieras usar solo crontab -e. Se le pedirá que seleccione un editor la primera vez que ejecute el comando. Entonces puedes agregarle esto:

0,15,30,45 * * * * /backup.sh >/dev/null 2>&1

Si cambia a una cuenta de usuario normal, deberá usarla sudo crontab -epara configurar los scripts que desea programar para que se ejecuten root.

crontab -lsolo muestra el crontab actual, una vez que configura uno usando crontab -e. Si tiene un archivo cron en /etc/cron.d/, no se mostrará con crontab -l.

También tendrá que comprobar que el script es ejecutable con: chmod +x /backup.sh.

clk
fuente
1
gracias, en este caso, el crontab se configura en el contexto de un, Dockerfileasí que realmente no puedo hacerlo crontab -e, pero de todos modos es una información útil
Jivan
2

Para Cron de * bian distros (como Raspbian) necesita habilitar el -lparámetro del demonio Cron. Es recomendable hacerlo usando el /etc/default/cronarchivo de configuración, habilitando el EXTRA_OPTS.

toco madera
fuente
Esto fue rechazado, pero es correcto en algunos casos, aunque no se explica. En las distribuciones basadas en Debian, la -lopción para el demonio cron autoriza un conjunto extendido de nombres de archivo en el /etc/cron.ddirectorio, por lo que si el archivo se ignora silenciosamente porque hay un punto en él, entonces "agregar -l" o "eliminar punto" corregirá el problema.
Ley29
1

Comprueba tu versión de cron.

Parece que si está usando el crond de Dillon, no necesita el usuario en una /etc/cron.dentrada.

Me di cuenta de esto después de casi arrancarme el pelo restante.

Tengo un puñado de entradas que han sido eliminadas /etc/cron.dpor varias instalaciones. Después de una investigación, descubrí que uno de ellos estaba funcionando. No tenía el usuario. Así que saqué al usuario de los demás. Y comenzaron a trabajar.

James Nelson
fuente