crontab raíz no se ejecuta

crontab raíz no se ejecuta

Estoy configurando mi servidor Debian para hacer una copia de seguridad de mis bases de datos con crontab, la utilidad mysqldump y gunzip.

Por alguna razón, mis líneas crontab parecen fallar, especialmente la crucial:

15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_`date '+%d-%m-%Y'`.sql.gz

He leído varios temas sobre los posibles orígenes de este comportamiento, pero aún no veo la razón por la cual este trabajo crontab aún no puede crear el archivo después de:

  • Usé los privilegios de root: los uso sudo crontab -epara editar el crontab raíz.
  • Usé un dónde para encontrar las rutas completas de los comandos que estoy usando, reemplazándolos, por ejemplo, mysqldumpcon /usr/bin/mysqldump.
  • Verifiqué que toda la línea funciona bajo la raíz: crea un archivo con la fecha de hoy, lleno con el resultado de mysqldump (mostrando una advertencia porque estoy usando una contraseña en la CLI, pero no creo que eso cause ningún problema). con crontab, ¿verdad?)

Supongo que algo anda mal en la forma en que configuro esta línea en el crontab, pero no puedo verlo.

Aparentemente, el crontab funciona correctamente porque cuando agrego la línea * * * * * env > /backup/env.txtobtengo un archivo que contiene el contenido env en la carpeta /backup...

¿Alguien tendría alguna idea sobre esto?

Gracias !

~ Stéphane

Respuesta1

La ruta predeterminada para cron es:

PATH=/usr/bin:/usr/sbin:.

La dateutilidad está ubicada en, /bin/por lo que necesitarás:

  1. agregue explícitamente este directorio al PATHforcron

    PATH=/bin/:/usr/bin:/usr/sbin:.
    15 2 * * * mysqldump --user=root --password=XXX --all-databases | gzip > /backup/database_$(date '+%d-%m-%Y').sql.gz
    

o

  1. proporcione la ruta completa para el datecomando:

    15 2 * * * /usr/bin/mysqldump --user=root --password=XXX --all-databases | /bin/gzip > /backup/database_$(/bin/date '+%d-%m-%Y').sql.gz
    

Prefiero la primera opción ya que el segundo método hace que sea muy fácil cometer un error y olvidarse de proporcionar la ruta completa para todos los comandos (como dateen su pregunta).

Respuesta2

Bien, encontré lo que no me funcionaba:

Al seguir el /var/log/syslog, descubrí que crontab tiene un límite de tamaño de línea. Entonces, al leer la línea, se detenía allí: ... $(date +'hacía que la línea tuviera un "error" en la ejecución.

Mi solución fue mover el trabajo a un script /root/backup.sh y editar el crontab usando:

15 2 * * * /root/backup.sh

¡¡Al menos ahora puedo hacer una copia de seguridad de mis datos!!

Espero que esta solución ayude a otros;)

información relacionada