为什么赢了';t cron是否执行my node.js脚本?

为什么赢了';t cron是否执行my node.js脚本?,node.js,cron,Node.js,Cron,我希望我的服务器每分钟执行一个节点脚本。如果我手动执行该文件(/main.js),程序就会执行得很好,所以我很确定这不是问题所在。但当我把它交给cron执行时,什么也没发生 这是cron文件中的一行 */1****/home/bryce/scripts/wudu/main.js #!/usr/bin/env node var program = require('commander'); var v = require('./cli/validation'); var a = require(

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

这是cron文件中的一行

*/1****/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);
下面是一个示例日志:

10月11日15:21:01服务器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);
你知道我为什么会被收音机静音吗?我应该在别的地方调试吗

更新:

我相信这个问题与我的相对文件路径有关,main.js是在它自己的目录之外执行的

现在,我把
exe.sh
放在
wudu
目录中。看起来是这样的:

#!/bin/bash

cd ${0%/*}
./main.js mail

exit

现在,我已经将cron设置为每分钟执行一次这个文件。我试着从其他文件夹执行这个文件,它的工作原理和预期的一样。但再说一次,克朗没有把它捡起来

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

尝试在cron中设置
NODE\u PATH
PATH

(如果需要这些值,请在命令行类型上:
echo$NODE\u PATH
echo$PATH

因此,您的cron条目如下所示:

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

只需确保用您第一次执行的
echo
命令得到的值替换
NODE\u PATH
&
PATH
的实际值。

我遇到了完全相同的问题,因此我结束了创建一个将加载环境变量的直通脚本,然后像这样执行NODE:

##!/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>
***

可能会检查文件的执行权限。这让我之前很困惑,但我已经解决了。谢谢。相对路径名:
var v=require('./cli/validation')
您的cron作业不是在
/home/bryce/scripts/wudu/
目录中启动的,但是当从cron调用时,pwd很可能是
/home/bryce/
。@wildplasser是的,我刚刚想到了这一点。我决定尝试使用crontab来执行shell脚本(位于
wudu
),然后执行./main.js文件。但这也行不通。我还尝试过全局安装模块(npm install-g)并从shell脚本执行全局模块,但我遇到了同样的问题。如何确保相对路径指向正确的文件?通常,您会将其包装到shellscript中。shellscript在调用实际负载之前设置一些环境(路径…)变量并更改工作目录。将
set>/tmp/mylog.log
放入shell脚本中进行验证。小注释:如果您有许多这样的脚本,您不应该为每个脚本添加env变量,只需在crontab文件的开头添加一次即可。doi do source ~/.bash_profile而不是.~/。bash_简介?