Node.js脚本不是从crontab执行的

Igo*_*sky 1 cron crontab node.js

我有一个crontab条目,应该像这样执行node.js脚本:

*/5 * * * * node /home/campaigns/reporting/UNIT_TESTS/testCron.js > /home/campaigns/reporting/UNIT_TESTS/cron.log

但是,它不会执行,并且不会更新日志文件.当我手动运行脚本时,一切正常.有任何想法吗??

谢谢你,伊戈尔

Ale*_*kiy 16

我也有这个问题.似乎在我们的服务器上进行系统更新后,节点二进制文件的链接就消失了PATH.因此,在这种情况下,最好的解决方案始终不使用node script.js,但在我们的例子中是二进制的完整路径/usr/local/bin/node script.js.


Anc*_*nia 8

我最近遇到了同样的问题,并且能够在以下博客文章的帮助下解决它.

基本上,将完整路径放在cron作业中的节点和文件中:

/usr/local/bin/node /var/www/coffee.js

http://www.themechanism.com/voice/2012/08/28/getting-node-js-and-cron-to-play-nicely/


Dan*_*ani 7

尝试使用以下命令制作脚本:

script.sh

#!/usr/bin/env sh
node /home/campaigns/reporting/UNIT_TESTS/testCron.js > /home/campaigns/reporting/UNIT_TESTS/cron.log
Run Code Online (Sandbox Code Playgroud)

然后将其添加到 cron:

*/5 * * * * /path/to/script.sh
Run Code Online (Sandbox Code Playgroud)

确保使脚本可执行 ( chmod +x script.sh)

  • 嗯,这让我走得更远。但是,它没有记录到我的文件,而是在命令行上输出以下内容:“您在 /var/spool/mail/root 中有新邮件”。另外,最好将节点的完整路径放入 bash 脚本中(正如我发现的),如下所示: /usr/local/bin/node (2认同)

小智 5

我在Linux下使用的是nvm install node.js,貌似crontab不太清楚路径,所以写了node的全路径来执行node文件。

* * * * * /home/www/.nvm/versions/node/v8.11.1/bin/node /home/www/ss-config/index.js
Run Code Online (Sandbox Code Playgroud)

  • 这很好,直到您使用 nvm 更改节点版本(即使用 nvm 正是因为您首先安装它的原因!),然后这将中断,并且考虑到它在 cron 中,您可能很长一段时间都不会注意到它中断! 。话虽如此,我不知道解决方案是什么,似乎没有一个好的解决方案,因为 cron 显然不会查看用户的环境 shell,因此您无法引用 nvm 的环境变量。我仍在研究答案.. (3认同)

小智 5

这里解释得很好

如果您的二进制文件(在本例中为节点)位于 /usr/local/bin 下,则可能会发生这种情况。默认情况下,crontab 在 /usr/bin 或 /bin 下查找二进制文件。