为什么这个node.js脚本不能在crontab中运行?

时间:2014-01-31 18:43:41

标签: node.js cron crontab

如果我在包含目录中运行我的node.js脚本,它运行正常。如果我使用

从crontab运行它
*/1 * * * * /usr/local/bin/node /Users/full/path/to/main >> ~/mtf.log

我看到与twilio配置相关的错误

var TWClient        = require('twilio')(configTwilio.accountSid, configTwilio.
                                                ^
TypeError: Cannot read property 'accountSid' of undefined

为什么从cron运行时这不起作用?在服务器(ubuntu)和localhost(OSX 10.8.5)上发生相同的行为

脚本顶部(main.js)

var phantom         = require('phantom');
var portscanner     = require('portscanner');
var FeedParser      = require('feedparser'),
    request         = require('request');
var configDB        = require('config').DB;
var configTwilio    = require('config').Twilio;
var mysql           = require('mysql');

var TWClient        = require('twilio')(configTwilio.accountSid, configTwilio.authToken);

配置文件default.yaml位于相对于main.js的config目录中并包含(编辑):

DB:
  dbHost: localhost
  dbPort: 3306
  dbName: xxx
  dbUser: xxx
  dbPass: xxx

Twilio:
  accountSid: AC8fxxxxxxxxd5f7aace47a8
  authToken:  d863b4ddfxxxxxx9b7c845

我也在当地试过这个:

env -i sh -c 'cd /path/to/script && /usr/local/bin/node main'

但得到:

events.js:72
        throw er; // Unhandled 'error' event
              ^
Error: spawn ENOENT

2 个答案:

答案 0 :(得分:0)

如果您尝试将其包装在shell脚本中,则可以在crontab条目中设置一些环境变量。

查看类似问题的答案:

https://stackoverflow.com/a/27823675/608269

答案 1 :(得分:0)

安排cron任务时,节点js不会在本地目录中标识config json文件。在main.js文件中添加以下代码以更改节点配置目录。

process.env.NODE_CONFIG_DIR= __dirname +'/config';

var config = require('config');