我有一个 crontab 条目,应该执行如下所示的 Node.js 脚本:
*/5 * * * * node /home/campaigns/reporting/UNIT_TESTS/testCron.js > /home/campaigns/reporting/UNIT_TESTS/cron.log
但是,它不会执行,日志文件也不会更新。当我手动运行脚本时,一切正常。有什么想法吗??
谢谢你, 伊戈尔
我也遇到这个问题了。似乎在我们的服务器上进行系统更新后,到节点二进制文件的链接从
PATH
消失了。因此,在这种情况下,最好的解决方案始终不是使用 node script.js
,而是使用二进制文件的完整路径,在我们的例子中是 /usr/local/bin/node script.js
。
我最近遇到了同样的问题,并在下面的博客文章的帮助下解决了它。
本质上,将节点和文件的完整路径放入 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/
尝试使用以下命令制作脚本:
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
)
我在Linux中使用nvm install node.js,似乎crontab不太了解路径,所以我写了node的完整路径来执行节点文件。
* * * * * /home/www/.nvm/versions/node/v8.11.1/bin/node /home/www/ss-config/index.js
$ 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"
对我来说第1步
/usr/bin/node /var/www/iiiiii.net/server.js
然后使用浏览器或邮递员点击端点(或 URL)。
我遇到了以下错误,因为我的配置在运行 crontab 时没有获取
.env
凭据。
Access denied for user ''@'localhost' (using password: NO)
这可能是任意数量的错误 - 但如果你以这种方式测试它,它会揭示你的特定错误。
获取节点执行的路径:
此路径可能会有所不同,具体取决于节点使用的安装方法。例如,如果您使用 n 节点版本管理器,则为 /root/n/bin/node。
复制结果,然后创建符号链接:
通常 /usr/bin/node 应该位于用于 crons 的路径中。 如果仍然不起作用,您可以通过添加临时 cron 作业来检查 cron 的实际 PATH(每分钟执行一次,确保之后将其删除):
crontab -e
添加:
* * * * * echo $PATH >> /root/debug.log
等待 debug.log 文件出现,然后检查路径的内容。
希望有帮助!