2011-11-23 4 views
4

je la commande suivante dans mon fichier Cron:La commande s'exécute à partir de la ligne de commande, pas de cron?

*/15 * * * * NODE_ENV=production ~/bin/node ~/myapp/app.js > /var/log/nodelog/nodelog_`date "+%Y-%m-%d_%H-%M"`.log 

La commande elle-même fonctionne sur OK lorsque copié et collé dans le shell bash, mais la tâche cron continue d'envoyer le message d'erreur suivant:

/bin/sh: -c: line 0: unexpected EOF while looking for matching ``' 
/bin/sh: -c: line 1: syntax error: unexpected end of file 

Pourquoi s'exécute-t-il correctement à partir de la ligne de commande, mais échoue dans le travail cron? Y a-t-il une différence entre la syntaxe attendue sur la ligne de commande et celle attendue dans cron?

Répondre

4

De manpage crontab:

Pourcentage-signes (%) dans la commande, à moins échappé avec Doseret (\), seront changés en caractères de nouvelle ligne, et toutes les données après la première% sera envoyé à la commande en tant qu'entrée standard.

0

Examinez les autorisations de fichier cron. Si cela vous appartient, alors vous pouvez utiliser ~. Sinon, utilisez le chemin complet ..!

1

crontab sont source d'erreurs pour les raisons générales suivantes:

  1. exigences de mise en forme crontab
  2. permissions
  3. environnement

Conseils

  • Utilisez scripts, pas les commandes en ligne dans votre crontab (!) - évite les problèmes d'échappement
  • Utilisez des chemins absolus dans votre script cron.
  • test utilisant env -i ./myscript.sh
+0

non plus. Il commet des erreurs au niveau de l'analyse syntaxique du shell ;-) –

+0

@ MichaelKrelin-hacker: ninja edit - était en train de taper réponse _pendant queston_ :) Tu as raison ma première intuition n'était pas le problème principal ici – sehe

+0

Oui, je t'ai vu mettre dans l'évasion après avoir commenté et sauf si vous êtes un ordinateur, probablement commencé à le faire avant de le lire :) –

Questions connexes