Команда запускается из командной строки, а не из cron? - PullRequest
4 голосов
/ 23 ноября 2011

В моем файле cron есть следующая команда:

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

Сама команда выполняется нормально при копировании и вставке в оболочку bash, но задание cron продолжает отправлять следующее сообщение об ошибке:

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

Почему он запускается нормально из командной строки, но не работает в задании cron? Есть ли разница между синтаксисом, ожидаемым в командной строке, и синтаксисом, ожидаемым в cron?

Ответы [ 3 ]

4 голосов
/ 23 ноября 2011

Из справочной страницы crontab:

Знаки процента (%) в команде, если они не экранированы обратной косой чертой (\), будут изменены на символы новой строки, и все данные после первого% будутотправляется на команду в качестве стандартного ввода.

1 голос
/ 23 ноября 2011

Crontabs подвержены ошибкам по следующим общим причинам:

  1. требования к форматированию в crontab
  2. разрешения
  3. среда

Подсказки

  • Используйте скрипты , а не встроенные команды в вашем crontab (!) - избегает экранирования проблем
  • Используйте абсолютные пути в вашем скрипте cron.
  • Тест с использованием env -i ./myscript.sh
0 голосов
/ 23 ноября 2011

Посмотрите на права доступа к файлу cron. Если он принадлежит вам, то вы можете использовать ~. В противном случае используйте полный путь ..!

...