Node.js 脚本未从 crontab 执行

问题描述 投票:0回答:8

我有一个 crontab 条目,应该执行如下所示的 Node.js 脚本:

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

但是,它不会执行,日志文件也不会更新。当我手动运行脚本时,一切正常。有什么想法吗??

谢谢你, 伊戈尔

node.js cron
8个回答
19
投票

我也遇到这个问题了。似乎在我们的服务器上进行系统更新后,到节点二进制文件的链接从

PATH
消失了。因此,在这种情况下,最好的解决方案始终不是使用
node script.js
,而是使用二进制文件的完整路径,在我们的例子中是
/usr/local/bin/node script.js


11
投票

我最近遇到了同样的问题,并在下面的博客文章的帮助下解决了它。

本质上,将节点和文件的完整路径放入 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/


9
投票

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

script.sh

#!/usr/bin/env sh
node /home/campaigns/reporting/UNIT_TESTS/testCron.js > /home/campaigns/reporting/UNIT_TESTS/cron.log

然后将其添加到 cron:

*/5 * * * * /path/to/script.sh

确保脚本可执行(

chmod +x script.sh
)


9
投票

我在Linux中使用nvm install node.js,似乎crontab不太了解路径,所以我写了node的完整路径来执行节点文件。

* * * * * /home/www/.nvm/versions/node/v8.11.1/bin/node /home/www/ss-config/index.js

5
投票

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


1
投票

$ sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/node" "/usr/local/bin/node" $ sudo ln -s "$NVM_DIR/versions/node/$(nvm version)/bin/npm" "/usr/local/bin/npm"



0
投票

对我来说第1步

/usr/bin/node /var/www/iiiiii.net/server.js

然后使用浏览器或邮递员点击端点(或 URL)。

我遇到了以下错误,因为我的配置在运行 crontab 时没有获取

.env

凭据。

 Access denied for user ''@'localhost' (using password: NO)

这可能是任意数量的错误 - 但如果你以这种方式测试它,它会揭示你的特定错误。


0
投票

获取节点执行的路径:
哪个节点

此路径可能会有所不同,具体取决于节点使用的安装方法。例如,如果您使用 n 节点版本管理器,则为 /root/n/bin/node。

复制结果,然后创建符号链接:
ln -s 复制PathFromStepAbove /usr/bin/node

通常 /usr/bin/node 应该位于用于 crons 的路径中。 如果仍然不起作用,您可以通过添加临时 cron 作业来检查 cron 的实际 PATH(每分钟执行一次,确保之后将其删除):

crontab -e

添加:

* * * * * echo $PATH >> /root/debug.log

等待 debug.log 文件出现,然后检查路径的内容。

希望有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.