Как вы можете выполнить скрипт Node.js через задание cron? - PullRequest
46 голосов
/ 01 мая 2011

Проще говоря, у меня есть скрипт узла, который я хочу выполнять раз в месяц.

30 6 1 * * node /home/steve/example/script.js

Но это не работает, возможно, из-за пути или оболочки, под которой запускается команда. Я пробовал следующие способы выполнения узла через cron (протестировано с -v):

steve@atom:~$ node -v
v0.4.2

steve@atom:~$ sh node -v
sh: Can't open node

steve@atom:~$ bash node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

steve@atom:~$ /usr/local/bin/node -v
v0.4.2

steve@atom:~$ sh /usr/local/bin/node -v
/usr/local/bin/node: 1: Syntax error: "(" unexpected

steve@atom:~$ bash /usr/local/bin/node -v
/usr/local/bin/node: /usr/local/bin/node: cannot execute binary file

У меня закончились идеи, какой-нибудь совет?

Ответы [ 5 ]

89 голосов
/ 01 мая 2011

просто укажите полный путь к узлу /usr/local/bin/node в вашем задании cron, например:

30 6 1 * * /usr/local/bin/node /home/steve/example/script.js
25 голосов
/ 01 мая 2011

Кроме того, просто поставьте #!/usr/local/bin/node в верхней части скрипта, который вы хотите выполнить.Тогда он автоматически узнает, как выполнить скрипт с узлом.Убедитесь, что файл также является исполняемым.

4 голосов
/ 07 января 2015

Я не знаю, хорошая ли замена относительных путей в вашем скрипте на абсолютные пути
(что происходит при изменении вашей файловой системы или при развертывании в другой среде?)

Вы можете попробовать обернуть его в сценарий оболочки, задав некоторые переменные окружения при выполнении crontab. (особенно PATH & NODE_PATH для начинающих)

Попробуйте мое предложение для этого похожего вопроса:
https://stackoverflow.com/a/27823675/608269

3 голосов
/ 26 октября 2017

в моем ноутбуке с Linux mint указанный путь не работает, поэтому я использовал это, чтобы обойти это.

$ which node

$ /usr/bin/node это сработало для меня.

0 голосов
/ 29 декабря 2017

Используйте абсолютные пути для псевдонима узла и файла для запуска.

Редактировать Cron Jobs

crontab -e

Запись для запуска файла нашего узла

Это будет выполняться каждую минуту.

*/1 * * * * * /bin/node /public/test.js

Полный учебник https://askmacgyver.com/blog/tutorial/how-to-run-node-scripts-from-a-cron-job

...