【问题标题】:Crontab doesn't run node script on ubuntu serverCrontab 不在 ubuntu 服务器上运行节点脚本
【发布时间】:2017-04-27 22:09:47
【问题描述】:

我正在尝试在 Ubuntu 14.04 服务器上将节点脚本作为 CRON 作业运行。我正在使用nvm

我试过了:

* * * * * /usr/bin/env node /var/www/apps/gmail-api/exe/m.js recent x@x.x

还有:

* * * * * node /var/www/apps/gmail-api/exe/m.js recent x@x.x

最后:

* * * * * ~/.nvm/bin/node-v6.6.0-linux-x64 /var/www/apps/gmail-api/exe/m.js recent x@x.x

都没有用。

但是,如果我运行:

node /var/www/apps/gmail-api/exe/m.js recent x@x.x

效果很好。

为什么 crontab 不运行我的脚本?

【问题讨论】:

  • 确保您的 crontab 工作正常。你在 cron 的末尾有行尾吗? serverfault.com/questions/230370/…
  • 您是否尝试了第三个示例中节点可执行路径的完整解析版本,而不是使其与~ 相关? cron 不会以您的用户身份运行,因此 ~/.nvm 无论如何都不存在。
  • cron 以您的用户身份运行不会有问题,但典型的情况是以 root 身份运行 cron 作业。在任何情况下,包括 $HOME 在内的大多数环境变量都不可用,因此 ~ 字符的扩展将不起作用。
  • @Klodoma 我在 crontab 文件的末尾添加了新的空行。 @mscdex 我把线路改成* * * * * /root/.nvm/bin/node-v6.6.0-linux-x64 node /var/www/apps/gmail-api/exe/m.js recent x@x.x 还是不行

标签: node.js ubuntu crontab


【解决方案1】:

我的解决方法:

我创建了在 pm2forever npm 模块中运行的脚本。

setInterval(()=>{
  child_process.exec('node scriptname.js arg1 arg2', (err, stdout, stderr)=>{
    if (err) {
      console.log(err);
    }
    console.log(stdout);
    console.log(stderr);
  });
}, 60000)

【讨论】:

    猜你喜欢
    • 2021-04-30
    • 1970-01-01
    • 2016-11-28
    • 2017-09-01
    • 1970-01-01
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    相关资源
    最近更新 更多