2009-07-20 6 views
6

Tengo un crontab configurado que comete errores cada vez que intento hacerlo. Funciona bien en el caparazón. Es el formato que estoy usando cuando intento insertar automáticamente la fecha en el nombre de archivo de la copia de seguridad de la base de datos. ¿Alguien sabe la sintaxis que necesito usar para que cron me permita insertar la fecha en el nombre del archivo?¿Formato adecuado para un nombre de archivo dinámico mysqldump en un cron?

mysqldump -hServer -uUser -pPassword Table | gzip > 
/home/directory/backups/table.$(date +"%Y-%m-%d").gz 

¡Gracias de antemano!

Respuesta

15

¿Qué pasa algo como esto por la parte de "comando" de la crontab:

mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | gzip > /tmp/table.`date +"\%Y-\%m-\%d"`.gz 

Lo que ha cambiado desde la OP es el escape del formato de fecha:

date +"\%Y-\%m-\%d" 

(Y yo acentos abiertos - pero que debería hacer mucha diferencia)

(otra solución sería poner su comando original en un shell-script, y ejecutar este desde el crontab, en lugar del comando, probablemente sería más fácil de leer/escribir ^^)

+1

Como nota al margen: casi siempre uso las opciones largas, por lo que el comando es más fácil de comprender/modificar por alguien que no suele utilizar las herramientas de línea de comandos –

+0

Por alguna razón, tuve que eliminar las barras para mi instancia. Gracias por esto sin embargo. : 3 – r109

0

La razón más común para "funciona en shell pero no en cron" es que los comandos que intentas ejecutar no están en PATH ... Razón es que el shell invocado desde cron no carga los mismos archivos que tu shell de inicio de sesión.

Solución: agregue la ruta absoluta a cada comando que intente ejecutar.

Lo segundo que noto en su comando. La sintaxis para ejecutar su comando de fecha parece que no es muy portátil. Un cambio que estar entre comillas sencillas, o ejecutar puso toda su mando a ShellScript (también, puede utilizarlo para establecer su trayectoria también) y ejecutar esa secuencia de comandos desde cron ..

EDIT:

Durante la escritura de mi Respuesta original. Mi diseño del teclado no tenía "backticks", así que comprueba lo que escribió Pascal.

y el ejemplo de lo que podría hacer con un shellscript:

Copiar siguiente para /usr/local/bin/dumptable.sh

#!/bin/sh 
/usr/bin/mysqldump --host=HOST --user=USER --password=PASSWORD DATABASE TABLE | /bin/gzip > /tmp/table.`/bin/date +"\%Y-\%m-\%d"`.gz 

y luego poner el directorio/usr/local/bin /dumptable.sh en cron ..

Cuestiones relacionadas