这是一个很愚蠢的。 这个问题是最有可能的服务器相关,所以我的第一个求助是AskUbuntu在这里 。
我试图让crontab或rc.local或init.d在启动时启动一个永远的脚本。 它将服务器连接到一个端口,我可以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 env添加到crontab或rc.local (不pipe用户级别似乎都不重要),stdout非常有用:
在Apache 2.4中安装casperJS和phantomJS将数据传递给PHP
从cron运行一个casper.js脚本
CasperJS与Slimerjs – Xlib:扩展名“RANDR”缺less显示“:99”
错误 – 运行spookyjs
如何在PhantomJS / CasperJS的窗口上使用subprocess模块
stdout致命:[Errno 2]没有这样的文件或目录; 你安装幻影?
closures错误
现在环境var在那里,在spawn()之后根本没有输出。
请注意,如果用户(任何特权级别)从bash永远运行节点,Casper启动就好了。
我怎么看到为什么spawn()失败?
用cmd多窗口运行casperjs
使用PHP的exec()给出错误:致命:没有这样的文件或目录; 你安装了吗?
如何在Windows上用CasperJS设置SlimerJS?
Grunt和CasperJStesting – 在Windows上不能退出或终止(只能用CTRL + C)
在Windows上安装CasperJS:如何正确执行?
这实际上看起来像永远,产卵和casperjs(也许phantomjs)之间的组合bug。 我能够重现您的问题, 这里是我的测试应用程序的完整代码。
你没有显示完整的代码,所以我的猜测是你有一个快速的应用程序,并有一个特殊的URL来运行casperjs脚本。
我构建了一个这样的简单应用程序,它的行为如下:
刚开始使用node script.js ( script.js是在server.js运行casperjs脚本的快速应用程序)的应用程序 – 它工作正常,呈现响应并将输出从子进程事件处理程序写入到控制台
使用init.d脚本以root用户身份启动应用程序 – 不起作用,一旦生成子代,就不会触发事件处理程序
用init.d脚本启动应用程序,使用echo替换casperjs – 相同,不起作用(请参阅,这里我们有这个问题,只是forever以root身份运行, spawn和echo )
启动应用程序作为一个普通的用户(不是根)与init.d,用'echo'代替casperjs – 它的工作原理,触发事件处理程序,在这里我几乎可以肯定问题已经解决,但…
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。