【问题标题】:Run exec() Rscript from wordpress install从 wordpress 安装运行 exec() Rscript
【发布时间】:2012-01-18 21:18:57
【问题描述】:

目标: 从 wordpress 页面运行一个简单的 Rscript。

  • 我目前正在尝试在加载页面时使用 exec() 运行 Rscript。该脚本创建一个包含 100 个从整数 1 到 10 的随机样本的直方图,将系统时间写入标题并将图形保存到 .png 文件。

设置

  • 在 Ubuntu EC2 微型实例上运行 Wordpress 安装
  • R已经成功安装并通过ssh测试
  • 使用Exec-PHP Wordpress插件,让PHP代码可以编写和执行(测试成功)

PHP 代码(wordpress 页面内)

    <?php 
    echo "This is the Exec-PHP 'Hello World'\n"; 
    echo exec("date");
    ?>

    <?php
    exec("Rscript <PATH>/test.R");
    ?>

    <img src="<Image Location>/samplePlot.png" alt="" title="Sample R" />

Rscript - test.R

    png( "<Image Location>/samplePlot.png")
    hist( sample( 1:10, 100, replace = TRUE), main= Sys.time(), lwd = 5)
    dev.off()

图像文件加载但未更新,表明 Rscript 从未执行。我已将其隔离为问题所在,但不确定为什么会这样。

我该如何调试呢?我真的不知道任何 PHP,但我尝试了以下方法:

    <?php
    exec("\usr\bin\Rscript <PATH>/test.R", $output, $result);
    echo $output;
    echo $result
    ?>

返回:

Array2

我希望得到命令行输出来检查错误。这可能吗?

【问题讨论】:

  • 它在命令行中是否按预期工作? r 脚本运行需要多长时间
  • 当我以普通用户身份登录时它确实有效。该脚本执行得非常快。会不会是权限问题?写不出来?我将如何检查这个?我无法从 php exec() 调用中获取任何输出。
  • 我猜脚本会在 HTML 发送给用户时运行,所以他们会在更新的同时下载旧版本的情节
  • @hadley 我认为这是可能的,但我检查了,图像根本没有更新。我什至走进机器检查了时间戳。从命令行运行 Rscript 时,这一点非常清楚。

标签: php r amazon-ec2


【解决方案1】:

要了解问题,请尝试:

$e = exec("\usr\bin\Rscript <PATH>/test.R 2>&1");
var_dump($e);

如果您得到类似的信息: dyn.load(file, DLLpath = DLLpath, ...) 中的错误... 您可能需要更新服务器动态库(尝试搜索 libfreetype.dylib),或者如果您正在运行 MAMP(就像我一样),您需要注释 (#) 中的两个未注释行:/Applications/MAMP/Library/bin/环境变量

我知道你发布这个问题已经很久了,但我花了很多时间来解决类似的问题 - 希望有人可以节省一些时间;)

【讨论】:

  • 虽然与原始问题(引用在 Ubuntu 中运行,而不是 Mac OS X 中运行)并不真正相关,但我不得不说 - 这结束了我长达数小时的沮丧搜索。即使在修改了库文件所有权之后,我也永远无法让 MAMP 正确地包含核心库(如 stats),尽管它可以很好地加载 RJSONIO。诡异的。无论如何,注释这些行允许 MAMP 执行 R 脚本找到它之前没有找到的 dylib,这大概是 stats 等包的依赖项。感谢分享!
【解决方案2】:

我认为问题在于您没有指定 Rscript 的完整路径,而运行 PHP/Apache 的用户只是不知道在哪里搜索它。

更新 exec 命令,例如(在 Linux 上):

exec("/usr/bin/Rscript <PATH>/test.R");

无论如何,我建议稍后为任务安装 littler 并(基于此)运行 r 而不是 Rscript 以让事情运行得更快 - 如果安装例如。 rApache 不是一个选项。

【讨论】:

  • 我原来用的是全路径,结果一样。在此期间,我会调查一下。
  • 您是否安装/配置了 apparmor 或类似设备?尝试从命令行以网络服务器用户的名义运行Rcript
猜你喜欢
  • 2015-04-12
  • 2018-05-28
  • 1970-01-01
  • 1970-01-01
  • 2011-03-30
  • 1970-01-01
  • 1970-01-01
  • 2014-07-20
  • 2015-10-10
相关资源
最近更新 更多