【发布时间】:2016-01-29 08:18:40
【问题描述】:
这有点笨拙。这个问题很可能与服务器有关,所以我的第一个办法是AskUbuntu over here。
我正在尝试让 crontab 或 rc.local 或 init.d 在启动时启动 forever 脚本。它将一个服务器连接到一个端口,我可以用一些信息 ping 并让它为我运行一个无头浏览器。
也就是说,我似乎无法从 Node.js 的spawn() 得到回复:
var CASPER_PATH = '/home/ubuntu/dev/casperjs/bin/casperjs'; // actual binary location, not a symlink
var SCRIPTS_PATH = '/home/custom_user/endpoints/server.js';
var fileName = req.body.source + '_' + req.body.type + '.coffee'; // looks like: mysource_my_scrape_type.coffee
var scrapeId = 'test_scrape';
var user = 'user123';
var pass = 'pass123';
if (fs.existsSync(SCRIPTS_PATH + fileName)) {
// If file is in place, spawn casperjs
var sP = spawn(CASPER_PATH,
[SCRIPTS_PATH + fileName, '--ssl-protocol=any', '--user='+user, '--scrapeId='+scrapeId, '--pass='+pass],
{ detached: true },
function (err, stdout, stderr) {});
sP.stdout.on('data', function(data) { console.log('stdout', data.toString('utf8')); });
sP.stderr.on('data', function(data) { console.log('stderr', data.toString('utf8')); });
sP.stdout.on('close', function(code) { console.log('close', code); });
res.send({ scheduled: true, key: scrapeId });
} else {
res.send({ scheduled: false, error: 'Incorrect source, type or the script is missing.' });
}
在我将 PHANTOMJS_EXECUTABLE 环境添加到 crontab 或 rc.local 之前(无论用户级别如何似乎都无关紧要),stdout 很有用:
stdout 致命:[Errno 2] 没有这样的文件或目录;你安装了吗 幻影?
关闭错误
现在环境变量已经存在,spawn() 之后根本没有输出。
请注意,如果用户(任何特权级别)从 bash 运行 node/forever,Casper 启动正常。
我如何查看spawn() 失败的原因?
【问题讨论】:
-
您能提供您的脚本的完整源代码吗?
spawn到底是什么?我刚刚查看了docs 并没有对 child_process.spawn() 的错误回调,如果您使用此spawn然后尝试添加 sP.on('error', ..) 处理程序并检查输出。如果您发布您的 crontab 或 init.d 也会很好,这样会更容易重现您的问题。
标签: javascript linux node.js phantomjs casperjs