【问题标题】:Cron run Nodejs Not workingcron运行Nodejs不工作
【发布时间】:2017-04-07 06:28:33
【问题描述】:

我需要运行一个sh脚本send.sh,内容如下:

node send.js -q 8435924032 >> send.log

如果我使用 crontab 作为*/2 * * * * /home/app/send.sh 运行它 什么都没有输出。

还有一封邮件显示 cron 进程抛出了一个错误:

ReferenceError: Promise is not defined
    at requestURL (/home/app/getData.js:34:16)
    at Object.getData (/home/app/getData.js:15:18)
    at /home/app/send.js:173:41
    ...

但是,当我直接运行 sh send.sh 时,它给了我正确的输出并且没有错误

有人可以帮忙吗?我想每两分钟运行一次程序。 我试过 PM2 但这样的 cron 功能不起作用。

【问题讨论】:

    标签: node.js centos promise crontab


    【解决方案1】:

    你检查用户root node.js 版本了吗?

    Crontab 默认以 root 身份运行 shell 脚本,这意味着它使用 root 用户 node.js 而不是您用于运行脚本的节点版本。

    旧版本的 node.js 不支持 Promise。

    如果你有root权限,可以查看root用户node.js版本,

    $sudo su
    $node -v
    

    或者,在您的 node.js 脚本中,

    console.log(process.versions); //which contains running node version
    

    【讨论】:

    • 你能告诉我如何检查用户根节点版本吗?
    • 如果你有root权限,试试这个。
    • @@ 多么神奇,node -v 给了我v6.6.0。但是sudo su node -v 给了我v0.10.42
    • root账户下安装node.js v6.x即可
    【解决方案2】:

    对你的 shell 文件进行一些修改:

    使用文件的绝对路径

    node /<path>/<to>/<file>/send.js -q 8435924032 >> send.log
    

    或导航到您的目录

    cd /<path>/<to>/<file>/;
    node ./send.js -q 8435924032 >> send.log
    

    【讨论】:

      猜你喜欢
      • 2018-06-25
      • 2018-08-17
      • 1970-01-01
      • 2016-05-09
      • 2013-07-02
      • 2021-05-10
      • 2017-03-09
      相关资源
      最近更新 更多