Cron运行Nodejs不工作

时间:2016-11-23 10:01:04

标签: node.js centos promise crontab

我需要运行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

时,它会给我正确的输出和NO ERROR

有人可以帮忙吗?我想每两分钟运行一次程序。 我尝试过PM2,但是这样的cron功能无效。

2 个答案:

答案 0 :(得分:2)

您是否检查过用户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

答案 1 :(得分:0)

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

使用文件的绝对路径

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

或导航到您的目录

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