Comando crontab no ejecutado

2

Tengo un comando en mi crontab que no se ejecuta correctamente, esto debería hacer una copia de seguridad de la base de datos todos los días a la hora especificada. Intenté ejecutar el comando en mi terminal y está funcionando correctamente.

Para editar mi crontab yo uso crontab -e La pestaña cron actual contiene lo siguiente:

# Save online agent status every 2 minutes
*/2 * * * * /usr/bin/python /home/dummy/scm/qt-savu/userstatus.py >> /home/dummy/qt-savu/userstatus.log

# Save Hourly call counts every XX:59
59 * * * * /usr/bin/python /home/dummy/scm/qt-savu/hourlylog.py >> /home/dummy/qt-savu/hourlycc.log

# Backup albatross everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz

# Backup bert everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz

Otros comandos en el crontab funcionan correctamente, los comandos que no funcionan son:

# Backup albatross everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.albatross.tar.gz

# Backup bert everyday
58 5 * * * /usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date +%y.%m%d`.bert.tar.gz

La salida del registro se ve así

Sep  4 05:56:01 luna CRON[18815]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword bert | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+)
Sep  4 05:56:01 luna CRON[18812]: (CRON) info (No MTA installed, discarding output)
Sep  4 05:56:01 luna CRON[18817]: (dummy) CMD (/usr/bin/mysqldump -udummy -ppassword albatross | /bin/gzip > /home/dummy/Documents/backups/`/bin/date '+)
Sep  4 05:56:01 luna CRON[18813]: (CRON) info (No MTA installed, discarding output)

Como observé, la salida del registro se detiene en /bin/date.

Irvin Denzel Torcuato
fuente
1
Le recomendaría que pusiera sus comandos en un shell scripts y luego los llamara para que el crontab sea fácil de leer.
albal
Gracias por la punta, ¿no aumenta la complejidad?
Irvin Denzel Torcuato
No, no aumenta la complejidad. En realidad simplifica la gestión si me preguntas. De esa manera, crontab simple administra cuando las tareas se ejecutan y luego las tareas en los scripts de shell pueden ser tan simples o complejas como sea necesario. El problema con la adición de comandos en línea en el crontab es a veces los problemas de sintaxis causados ​​por el hecho de abarrotar una sola línea en ese formato en realidad causan más dolores de cabeza en la línea.
JakeGould

Respuestas:

4

% Es tratado especialmente por cron. Se utiliza para denotar el final de la parte del comando y el comienzo de la entrada estándar. Como tal, debes escapar, como tal: \%.

Desde la página del manual de crontab:

La parte completa del comando de la línea, hasta una nueva línea o el carácter%, se ejecutará mediante / bin / sh o mediante el shell especificado en la variable SHELL del archivo crontab.

alienth
fuente
Dios envió, ha estado preocupado por esto durante más de una hora ... ¿hay una lista de caracteres especiales en las páginas del manual? Eso explica el resaltado de sintaxis extraño - (editar)
Irvin Denzel Torcuato
Por la página del manual ( man 5 crontab ), el sexto campo solo tiene ese caracter especial.
alienth
@IrvinDenzelTorcuato También, como se explica en los comentarios a su pregunta inicial, es por esto que se recomienda que las entradas de crontab solo llamen un script y luego vuelquen toda la lógica central en un script independiente. En este caso, estoy bastante seguro de que el problema se resolvería con un script independiente. No decir que esta respuesta es incorrecta, es correcta, pero también muestra los escollos de eliminar el script de shell de una sola línea en los comandos crontab.
JakeGould