为什么不会cron执行我的node.js脚本?

我希望我的服务器每分钟执行一次节点脚本。 如果我手动执行文件( ./main.js ),程序执行完美,所以我很确定这不是问题。 但是当我把它交给cron来执行的时候,什么都不会发生。

这是cron文件的一行。

*/1 * * * * /home/bryce/scripts/wudu/main.js

这里是一个示例日志:

Oct 11 15:21:01 server CROND[2564]: (root) CMD (/home/bryce/scripts/wudu/main.js)

可执行文件: home/bryce/scripts/wudu/main.js

 #!/usr/bin/env node var program = require('commander'); var v = require('./cli/validation'); var a = require('./cli/actions'); program .version('0.0.1') .option('-u, --url', 'Register url') .option('-s, --selector', 'Register selector') .option('-p, --pagination', 'Register pagination') .option('-i, --index', 'Pass an index, to destroy') .parse(process.argv); var args = process.argv.slice(2), mode = v.mode(args[0]), options = v.hasArgs(mode, program); a.init(mode, options); 

任何想法,为什么我收到无线电沉默? 别的地方,我应该期待debugging?

更新:

我相信这个问题与我的相关文件path有关,而main.js是从它自己的目录之外执行的。

所以现在我把exe.sh放在wudu目录下。 它看起来像这样:

 #!/bin/bash cd ${0%/*} ./main.js mail exit 

现在,我设置了cron来每分钟执行一次这个文件。 我试图从其他文件夹执行此文件,并按预期工作。 但是,再一次,克朗并没有拿起它。

将执行包装在shell脚本中,cron中脚本的执行可能没有与从命令行运行时相同的环境设置。

尝试使用NODE_PATHPATH设置在cron中执行shell脚本
(如果您需要这些值,请在命令行上input: echo $NODE_PATHecho $PATH

所以,你的cron条目看起来像这样:

 */1 * * * * NODE_PATH=/usr/local/lib/node_modules PATH=/opt/local/bin:ABC:XYZ /home/bryce/scripts/wudu/exe.sh 

只要确保将NODE_PATHPATH的实际值replace为从第一次执行的echo命令中获得的值NODE_PATH

我有完全相同的问题,所以我结束了创build一个加载我的环境variables的传递脚本,然后像这样执行节点:

 ##!/bin/bash # Source bash profile to load env variables # or any other that you want to set explicitly . ~/.bash_profile # tunnel that allows us to execute cron jobs node $1 $2 

要使用只需将其添加到您的crontab

 * * * * * <user> <passthrough_script> <arg1> <arg2>