【发布时间】:2014-12-06 14:46:57
【问题描述】:
我希望我的服务器每分钟执行一次节点脚本。如果我手动执行文件(./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);
知道为什么我会收到无线电静音吗?我应该在其他地方进行调试?
更新:
我认为问题与我的相对文件路径有关,并且 main.js 是从其自己的目录之外执行的。
所以现在,我已将exe.sh 放在wudu 目录中。它看起来像这样:
#!/bin/bash
cd ${0%/*}
./main.js mail
exit
现在,我已将 cron 设置为每分钟执行一次此文件。我尝试从其他文件夹执行此文件,它按预期工作。但同样,cron 并没有接受它。
【问题讨论】:
-
可能会检查文件的执行权限。
-
之前这把我搞砸了,但我已经解决了。不过还是谢谢。
-
相对路径名 :
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 在调用实际有效负载之前设置一些环境( PATH ...)变量并更改工作目录。将
set >>/tmp/mylog.log放入shellscript进行验证。