Tengo los siguientes trabajos cron definidos.
55 8 * * 3 /usr/bin/php /home/mark/dev/processes/customClient/events.php > /home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv
0 9 * * 3 /usr/bin/echo 'The csv for last week, trying my hand at automatiging this' | /usr/bin/mutt <emailaddress> -s 'Events from `date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`' -a '/home/mark/dev/processes/customClient/events-`date +%Y-%m-%d --date='last Wednesday'`-`date +%Y-%m-%d`.csv'
Parece funcionar correctamente si ejecuto el comando anterior directamente desde la línea de comando. Pero cuando revisé la ejecución del script esta mañana, recibí un correo electrónico que decía (estoy parafraseando porque los eliminé accidentalmente) que los ticks posteriores no se cerraron correctamente.
command-line
cron
Mark D
fuente
fuente

/bin/sh: 1: Syntax error: EOF in backquote substitutionPara el primer trabajo cron./bin/sh: 1: Syntax error: Unterminated quoted stringPara el segundo trabajo cron.$(...)le ayudará a lidiar con los problemas de cotización ...Respuestas:
Recomiendo encarecidamente colocar cualquier trabajo cron no trivial en su propio archivo de script de shell, por muchas razones:
fuente
%caracteres problemáticos en el guión evitará que loscronconviertan en nuevas líneas, que es su verdadero problema.Hay tres causas comunes para que los comandos de trabajo cron se comporten de manera diferente en comparación con los comandos escritos directamente en un shell interactivo, en un orden aproximado de comunidad:
$PATHy faltan otras variables esperadas./bin/shde forma predeterminada, mientras que puede estar utilizando algún otro shell de forma interactiva.%personaje especialmente (se convierte en una nueva línea en el comando).Debe preceder a todos los
%caracteres con a\en un archivo crontab, que le dice a cron que solo ponga un porcentaje en el comando. Recuerde eso cuando use eldatecomando en un trabajo cron.También arreglé algunos problemas de citas:
$(…)en su lugar: sus reglas de análisis son más simples."$somevariable","$(somecommand)". Aquí la falta de comillas fue inofensiva porque eldatecomando nunca devolvió ningún carácter especial para los formatos que usó, pero debe recordar cuidadosamente qué caracteres son especiales y verificar esto cada vez que deje una sustitución sin comillas. Que sea simple, siempre use comillas dobles a menos que desee que se produzca la división de campos y la generación de nombre de archivo en el resultado.fuente
Parece que has anidado
'en elmuttcomando:Intente usar en
"lugar del interno'para que la instrucción leafuente