2009-09-28 33 views
6

La siguiente funciona como se espera:Cron falla con sencillo en el apóstrofe

date +'%d-%b-%Y-%H-%M' 

28-Sep-2009-14-28

Pero ninguno de los siguientes 4 entradas de crontab están trabajando.

 
* * * * * date +\'%d-%b-%Y-%H-%M\' >> /backup/shantanu/testing.txt 
* * * * * date +'%d-%b-%Y-%H-%M' >> /backup/shantanu/testing1.txt 
* * * * * date +"%d-%b-%Y-%H-%M" >> /backup/shantanu/testing2.txt 
* * * * * date +\"%d-%b-%Y-%H-%M\" >> /backup/shantanu/testing3.txt 
 
Error: 
/bin/sh: -c: line 0: unexpected EOF while looking for matching `"' 
/bin/sh: -c: line 1: syntax error: unexpected end of file 

puedo guardar el mismo código en un script de shell y establecer el cron, pero me gustaría saber si es posible establecer directamente un cron para la tarea.

La entrada cron real que estoy tratando de establecer ve algo como esto ...

16 * * * * mysqldump myDB myTB > /backup/ABCbc$(date +'%d-%b-%Y-%H-%M').sql 2> /backup/ABCbc_errORS$(date +'%d-%b-%Y-%H-%M').txt
+0

Si resolvió su problema, publíquelo como respuesta. –

+0

58 13 * * */usr/bin/mysqldump -uroot -pPassword --compact --databases db1 db2 db3 db4 | zip>/home/develop/backup/central_mydt $ (date + '\% d \% m \% y'). zip – shantanuo

Respuesta

17

Hay cuatro causas comunes de trabajo cron comandos a comportarse de manera diferente en comparación con los comandos escritos directamente en una shell interactiva:

  • Cron proporciona un entorno limitado, por ejemplo, un mínimo de $PATH, y otras variables esperadas faltante.
  • Cron invoca /bin/sh de forma predeterminada, mientras que puede estar utilizando otro shell de forma interactiva.
  • Cron trata el carácter % especialmente (se convierte en una nueva línea en el comando).
  • El comando puede comportarse de manera diferente porque no tiene un terminal disponible.

Usted debe preceder a todos los personajes con un %\ en un archivo crontab, que le dice a cron sólo hay que poner un % en el comando, por ejemplo,

 
16 * * * * mysqldump myDB myTB > "/backup/ABCbc$(date +'\%d-\%b-\%Y-\%H-\%M').sql" 2> "/backup/ABCbc_errORS$(date +'\%d-\%b-\%Y-\%H-\%M').txt" 

(Como una cuestión separada, siempre poner comillas dobles alrededor de un "$variable_substitution" o una "$(command substitution)", a menos que sepa por qué no hacerlo en un caso particular. De lo contrario, si el contenido de variables o salida del comando contiene espacios en blanco o ?*\[, serán interpretados por el shell.)

0

Mientras que no hay espacios en la cadena de formato suministrado como argumento hasta la fecha, que no es necesario los tics en absoluto.

date +%d-%b-%Y-%H-%M 

debería funcionar.

+0

Quité las comillas como se mencionó anteriormente y aún no funciona desde cron. Funciona bien desde una línea de comando. – shantanuo

0

Está utilizando una sintaxis no compatible con/bin/sh. Intenta invocar tu shell preferido y pasar el comando como argumento.

+0

¿Puedes por favor elaborar? – shantanuo

+0

¿Qué shell estás usando? –

+0

lo tengo. Gracias. Problema resuelto. – shantanuo

Cuestiones relacionadas