2014-09-10 45 views
4

我使用npm全局安装了模块下划线。如果我运行该脚本无法将模块导入节点脚本(如果它从cron运行)

/usr/local/bin/node /home/olmo/project/processDrivesMultiUser.js 

我的道路上无论它运行正常,但如果我像这样运行一个cronjob:

3,18,33,48, * * * * /usr/local/bin/node /home/olmo/project/processDrivesMultiUser.js 

我得到这个错误:

Date: Wed, 10 Sep 2014 16:26:01 -0600 
From: Cron Daemon <[email protected]> 
To: [email protected] 
Subject: Cron <[email protected]> /usr/local/bin/node /home/olmo/project/processDrivesMultiUser.js 


module.js:340 
    throw err; 
     ^
Error: Cannot find module 'underscore' 
    at Function.Module._resolveFilename (module.js:338:15) 
    at Function.Module._load (module.js:280:25) 
    at Module.require (module.js:364:17) 
    at require (module.js:380:17) 
    at Object.<anonymous> (/home/olmo/sandbox/api_ievwebapp/parseAdminScripts/processDrivesMultiUser.js:20:9) 
    at Module._compile (module.js:456:26) 
    at Object.Module._extensions..js (module.js:474:10) 
    at Module.load (module.js:356:32) 
    at Function.Module._load (module.js:312:12) 
    at Function.Module.runMain (module.js:497:10) 

如果它通过cron运行,它无法找到模块underscore。我为我用来手动运行脚本的相同用户名创建了cron条目。

有什么想法?

+2

node.js是否使用环境变量来保存搜索路径列表?这是“它适用于我,但不是来自cron”问题的通常根源。 – 2014-09-10 23:11:45

+0

'underscore'是全局安装的,还是您正确地将它安装在相对于该脚本的node_modules文件夹中? – loganfsmyth 2014-09-10 23:45:22

+0

@loganfsmyth我的'underscore'模块全局安装。 @ muistooshort:我如何验证它?我该如何解决它? – otmezger 2014-09-11 02:53:28

回答

4

我可以根据mu的评论找到答案太短。

我修改了crontab来包括环境变量NODE_PATH

3,18,33,48, * * * * export NODE_PATH=/usr/local/lib/node_modules/ && /usr/local/bin/node /home/olmo/project/processDrivesMultiUser.js 

现在我能够使用模块node.js如果调用由cron