为什么 cron 无法正确执行我的 node.js 脚本?

Why is cron not executing my node.js script properly?

提问人:centershocks 提问时间:5/11/2022 更新时间:5/11/2022 访问量:762

问:

我正在尝试从 cron 运行 node.js 脚本。它应该读取一个 .json-File,进行 API 调用,然后将响应写入 .json-File。

手动执行时,一切正常。

这完成了它的工作

sudo node ~/bots/gtaa/index.js

sudo crontab -e

29 9 * * 1-5 /usr/bin/node ~/bots/gtaa/index.js >> ~/gtaa-bot.log 2>&1

grep cron /var/log/syslog

May 11 09:29:01 raspberrypi CRON[54381]: (root) CMD (/usr/bin/node ~/bots/gtaa/index.js >> ~/gtaa-bot.log 2>&1)

我的索引 .js 使用本地 .env 文件

require('dotenv').config({ path: __dirname + '/.env' })

主目录中也没有 -File。gtaa-bot.log

这里提出了一个非常相似的问题,但没有提供有用的答案。

节点 .js cron

评论


答:

0赞 treckstar 5/11/2022 #1

好吧,我最近遇到了这个问题 Ubuntu 20.04.4 LTS

最终发生的事情是 cron 在不同的环境中运行,并且很可能无法找到正确的节点路径。

有一些方法可以配置它,但是我发现一个更简单的解决方案最终是让 cron 执行一个运行 nvm 和/或节点的 bash 脚本。

例如,我设置每 20 分钟运行一次:

20 * * * * /bin/bash/ /home/user/nvm_cron.sh

在我的文件中:nvm_cron.sh

# Load nvm
export NVM_DIR="$([ -z "${XDG_CONFIG_HOME-}" ] && printf %s "${HOME}/.nvm" || printf %s "${XDG_CONFIG_HOME}/nvm")"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
nvm use 16.14.0

# Run node program
cd /home/user/folder && node start.js

不要忘记确保nvm_cron.sh文件是可执行的

这样我就可以控制要为脚本运行的节点版本,而不必担心弄乱 cron。