【问题标题】:Launching Julia as a background process from apache php stack (on drupal)从 apache php 堆栈启动 Julia 作为后台进程(在 drupal 上)
【发布时间】:2017-01-01 00:41:38
【问题描述】:

我正在尝试从 drupal 网站启动一个 julia 程序(在 xampp for Windows 上运行),它需要在后台异步运行,同时 php 脚本继续执行。这是我正在尝试使用的代码:

$juliaFile =  escapeshellarg(DRUPAL_ROOT . '/sites/all/modules/tsap/Modeling/runme.jl');
$cmd = "start /B julia $juliaFile";
pclose(popen($cmd, 'r'));

如果我通过命令行 php 脚本运行此代码,它可以完美运行,但是当它通过 apache 运行时它不起作用,但是,下一段代码可以在命令行和网络服务器上运行(唯一的区别正在运行 php 脚本而不是 julia 程序)

$phpFile =  escapeshellarg(DRUPAL_ROOT . '/sites/all/modules/tsap/Modeling/runme.php');
$cmd = "start /B php $phpFile";
pclose(popen($cmd, 'r'));

我还尝试调用由 web 服务器执行的 php 文件中的第一个代码块,这也从命令行成功,并在服务器尝试执行它时失败。

使用反引号运算符和exec()(它们在通话中阻塞)也遇到问题,使用COM::run() 会导致与pclose(popen()) 相同的问题

有没有人有任何想法让 julia call 发挥作用?

感谢您的宝贵时间

【问题讨论】:

    标签: php windows apache drupal-7 julia


    【解决方案1】:

    在您的命令末尾添加'&',这会将命令放在cackground 中。

    您也可以使用proc_open() 来运行命令后台。您还参考了我的post,它使用 proc_open() 来运行命令后台。

    【讨论】:

    • 据我所知, & 在 Windows 上不可用,并且 start /B 是替代方案,无论如何我尝试过,它导致 julia 和 php 版本都失败。我还尝试使用 proc_open 和 proc_close,这导致了与 popen 和 pclose 相同的行为,即适用于后台 php 进程而不是后台 julia 进程。
    • 如果是这样,不是子进程调用函数引起的。这是其他一些原因。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-05
    • 2018-01-02
    • 1970-01-01
    相关资源
    最近更新 更多