我为我的特定用户安装了 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"