Nodejs 的 Cron 作业没有为特定用户运行

Nodejs 的 Cron 作业没有为特定用户运行

我为我的特定用户安装了 nodejs。我实现了一个价格馈送应用程序,当我执行时,whereis feeder我得到了以下输出:

feeder: /home/user/.nvm/versions/node/v11.6.0/bin/feeder

然后,我尝试运行一个 cronjob 来每小时执行一次,并crontab -e在我使用用户名登录时创建一个 cronjob,就像在我的目录路径中使用以下作业一样:

33 * * * * /home/user/.nvm/versions/node/v11.6.0/bin/feeder nodename priv_key

由于某种原因,我肯定没有正确的访问级别,因为这不会广播交易(这是一个区块链节点,所以当我说广播时,我的意思是出现在区块链中)。我知道它可以工作,因为有一个测试函数可以成功广播交易,所以我认为这是一个 cronjob 访问问题。

我尝试使用以下命令查看输出grep CRON /var/log/syslog,但出现以下错误:grep: /var/log/syslog: Permission denied

sudo grep CRON /var/log/syslog以下是我的作业按照注释中的建议运行后系统日志的输出:

Jan  6 12:33:01 server CRON[14787]: (user) CMD (/home/user/.nvm/versions/node/v11.6.0/bin/feeder nodename priv_key)
Jan  6 12:33:01 server CRON[14786]: (user) MAIL (mailed 52 bytes of output but got status 0x004b from MTA#012)

有人知道为什么我的 cronjob 无法访问它或者没有正确的权限吗?

编辑:我根据评论更新了 cronjob,这里是错误文件的输出/usr/bin/env: ‘node’: No such file or directory

type node返回:

node is /home/user/.nvm/versions/node/v11.6.0/bin/node

答案1

该错误消息意味着您尝试运行的脚本很可能具有以下内容舍邦线:

#!/usr/bin/env node

env本质上,这意味着“找到此用户的 $PATH 中调用的第一个可执行文件”。该PATH变量保存包含可执行文件的目录列表。问题是 cron 有自己的环境,因此它自己的PATH,并且不包括命令所在node的目录。因此,您需要编辑 crontab 文件并按如下方式进行更改:

PATH="/usr/bin:/bin:/home/user/.nvm/versions/node/v11.6.0/bin"
33 * * * * /home/user/.nvm/versions/node/v11.6.0/bin/feeder nodename priv_key

确保添加目录而不是文件。因此,如果您的node/home/user/.nvm/versions/node/v11.6.0/bin/node,您需要:

PATH="/usr/bin:/bin:/home/user/.nvm/versions/node/v11.6.0/bin"

并不是:

PATH="/usr/bin:/bin:/home/user/.nvm/versions/node/v11.6.0/bin/node"

然后,保存 crontab,一切就绪了。如果您遇到类似的问题,请重复此过程:通过附加> /tmp/somefile 2>&1到 cron 命令的末尾将 stderr 和 stdout 重定向到文件,检查错误消息,并以类似的方式将包含其他所需内容的目录添加到路径中:

PATH="/usr/bin:/bin:/path/to/node:/some/other/path"

相关内容