J'ai les tâches cron suivantes définies.
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'
Il semble fonctionner correctement si je l'exécute la commande ci-dessus directement à partir de la ligne de commande. Mais quand j'ai vérifié le déroulement du script ce matin, j'ai reçu un e-mail m'indiquant (je paraphrase parce que je les ai accidentellement supprimés) que les ticks arrière n'étaient pas fermés correctement.
command-line
cron
Mark D
la source
la source
/bin/sh: 1: Syntax error: EOF in backquote substitution
Pour le premier travail cron./bin/sh: 1: Syntax error: Unterminated quoted string
Pour le deuxième travail cron.$(...)
vous aider à résoudre les problèmes de citation ...Réponses:
Je recommande fortement de placer tous les travaux cron non triviaux dans leur propre fichier de script shell, pour plusieurs raisons:
la source
%
caractères gênants dans le script empêchera de lescron
transformer en nouvelles lignes, ce qui est votre vrai problème.Il existe trois causes courantes pour lesquelles les commandes cron job se comportent différemment des commandes saisies directement dans un shell interactif, dans un ordre approximatif de commun:
$PATH
et d'autres variables attendues manquantes./bin/sh
par défaut, alors que vous utilisez peut-être un autre shell de manière interactive.%
personnage spécialement (il est transformé en nouvelle ligne dans la commande).Vous devez faire précéder tous les
%
caractères d'un\
dans un fichier crontab, qui indique à cron de simplement mettre un pourcentage dans la commande. N'oubliez pas que lorsque vous utilisez ladate
commande dans une tâche cron.J'ai également corrigé quelques problèmes de citation:
$(…)
plutôt: ses règles d'analyse sont plus simples."$somevariable"
,"$(somecommand)"
. Ici, l'absence de guillemets était inoffensive car ladate
commande n'a jamais renvoyé de caractère spécial pour les formats que vous avez utilisés, mais vous devez vous rappeler soigneusement quels caractères sont spéciaux et vérifier cela chaque fois que vous laissez une substitution sans guillemets. Restez simple, utilisez toujours des guillemets doubles, sauf si vous souhaitez que le fractionnement des champs et la génération du nom de fichier se produisent sur le résultat.la source
Vous semblez avoir imbriqué
'
dans lamutt
commande:Essayez d'utiliser à la
"
place de l'intérieur'
pour que l'instruction indiquela source