2011-03-29 14 views
33

Estoy tratando de obtener un cronjob para canalizar la salida a un archivo fechado en una ubicación especificada (carpeta)./bin/sh: Error de sintaxis: cadena entrecomillada no terminada

Mi entrada en el crontab se ve algo como esto:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/%Y%m%d.test.log") 

Lo que no entiendo es que al escribir este comando en la consola, tengo la cadena correcta:

echo $(date "+/home/oompah/logs/%Y%m%d.test.log") 
/home/oompah/logs/20110329.test.log 

¿Qué hay causando este error y ¿cómo puedo solucionarlo?

fiesta de información de la versión es:

fiesta de GNU, versión 4.1.5 (1) -release (x86_64-pc-linux-gnu)

+1

Pertenece a http://askubuntu.com o http://unix.stackexchange.com –

+0

@Let_Me_Be: Aunque puedo ver su punto, existe un peligro real de que SO se extienda tan fino, que termine con varios sitios "especializados" con no más de unas pocas docenas o más de doscientas personas para responder preguntas. Esta pregunta es relevante aquí, porque aunque lo he mantenido simple (por brevedad y claridad), podría ampliarse fácilmente para incluir preguntas sobre Python y C++, que son las tareas que ejecuta cron. – oompahloompah

+0

Bueno, esa es una discusión para meta. –

Respuesta

79

Debe excape los signos de porcentaje en su crontab:

* * * * * /some/path/test.sh >> $(date "+/home/oompah/logs/\%Y\%m\%d.test.log") 

por ciento (%) signos tienen un significado especial en crontabs. Se interpretan como caracteres de nueva línea.

+1

Muchas gracias. Esto soluciona el problema. Debería haber notado esto antes, ya que el color del editor vim mostraba que la cadena no estaba cerrada. Duh !. gracias de todos modos, me salvaste una tarde de frustración.m :) – oompahloompah

+0

De nada. También luché con esos signos de porcentaje varias veces. Finalmente lo aprendí;) – bmk

+0

¡Muy útil para saber, acabo de ser mordido por esto! –

3

Ponga el comando fecha dentro del guión. cron no necesariamente ejecuta el shell que crees que es.

+0

+1 para el fraseo gemelo de los picos :) – user237419

+0

No estoy seguro de entender lo que quieres decir. Quiero que la salida del script se envíe al archivo. No me gusta la posibilidad de volver a escribir el script para que todas las declaraciones de impresión se redirijan a archivo en lugar de stdout, a menos que me falta algo? - aclare – oompahloompah

+0

No es necesario tener $ (date ...) en el crontab. Ponlo dentro de test.sh. – bmargulies

0

asegúrese de tener shebang #!/bin/bash como primera línea en su secuencia de comandos. Además, como declaró bmargulies, ponga el comando date dentro de la secuencia de comandos si es posible.

Cuestiones relacionadas