【问题标题】:Running PhantomJS as daemon in OS X在 OS X 中将 PhantomJS 作为守护进程运行
【发布时间】:2013-02-06 00:14:09
【问题描述】:

我正在使用 Zend 框架和 phantomJS 为我工作的网站渲染图像。我有一个作业侦听器脚本,它循环并在队列中查找作业。找到工作后,它使用来自工作消息的数据来构造 phantomJS 命令并通过以下方式执行命令 php 的 EXEC 命令。

如果我自己从命令行启动作业侦听器,则此过程非常有效。但是,如果守护程序用户(OS X 中的 Web 用户)尝试运行 phantomJS,则不会发生任何事情。没有错误信息,什么都没有。

我尝试了几件事,包括
1. 将这一行添加到 sudoers daemon ALL=NOPASSWD: /usr/bin/phantomjs
2.赋予phantomjs及其父目录777权限。
3. 赋予 phantomjs 的守护进程所有权

然而,尽管如此,我还是无法从 Daemon 用户那里获得执行 phantomJS。

如果有人能指出我正确的方向或添加一些建议,我将非常感激。

提前致谢,

【问题讨论】:

  • 试过用--debug=yes运行phantomjs?另外,您是否尝试使用 CLI 中的 sudo 以守护程序用户身份运行它? sudo -u daemon phantomjs --debug=yes ...。可能是环境问题(NODE_PATH?)。

标签: php javascript permissions command-line-interface phantomjs


【解决方案1】:

您可以尝试像服务一样运行您的 phantomjs 脚本,而不是通过 EXEC 命令运行它。

使用名为 Mongoose 的嵌入式 Web 服务器模块,PhantomJS 脚本可以启动 Web 服务器。这是为了方便 PhantomJS 脚本与外部世界之间的通信,不建议用作一般生产服务器。

有关嵌入式 Web 服务器如何工作的信息,请参阅here

这里有一个关于 PhantomJS 脚本如何启动 Web 服务器的示例。

var server = require('webserver').create();
var service = server.listen('127.0.0.1:8080', function(request, response) {
    response.statusCode = 200;
    response.write('<html><body>Hello!</body></html>');
    response.close();
});

服务运行后,它可以发送一个 JSON 对象作为响应,该对象可以很容易地被 PHP 解释。

收听任何域server.listen('8080', ....)

设置 HTTP 响应头 response.setHeader("Access-Control-Allow-Origin","*");

【讨论】:

    猜你喜欢
    • 2013-06-14
    • 2023-03-02
    • 1970-01-01
    • 2012-12-03
    • 2011-08-25
    • 1970-01-01
    • 1970-01-01
    • 2014-04-26
    • 2011-07-21
    相关资源
    最近更新 更多