【问题标题】:PHP executing background command line scriptPHP执行后台命令行脚本
【发布时间】:2023-09-08 12:03:01
【问题描述】:

不知道该怎么说……但是就这样吧。

我有一个想要在后台运行的 php 脚本,但我想从另一个 php 网页调用它。

这就是我试图称呼它的方式:

if (isset($_REQUEST['go']) && $_REQUEST['go'] =="monitor" ) {
   echo "background script running";
   $cmd = "php -n monitor.php";
   shell_exec("$cmd > /dev/null 2>&1 &");
   exit;
}

监视器很简单。它登录到数据库并检查特定值。 如果未找到该值,它会不断重复该过程,每 xx 秒检查一次以查看该值是否已设置。

如果找到它,它会更新日志并退出。

我遇到的问题是监视器在命令行中工作正常,但是当通过浏览器中的另一个页面调用时,我似乎无法让它运行。

有什么想法吗?

谢谢

更新

   $cmd = "php -n monitor.php";
   shell_exec($cmd);

这有效,但它使调用它的页面保持活动状态。一旦我尝试在后台运行它就会失败。

知道为什么吗?

【问题讨论】:

  • monitor.php 是否有其他用户的读取和执行权限?
  • 您是否尝试过传递完整路径? $cmd = "php -n /var/www/.../monitor.php"
  • @KaranPunamiya 监视器与调用它的主页具有相同的权限。
  • @iswinky 使用完整路径不起作用:(
  • 权限设置是什么?其他文件由您的用户调用。 monitor.php 文件由 www-data 调用。

标签: php shell command-line background


【解决方案1】:

尝试使用以下方法

$command = '/usr/bin/php -n [PATH]/[FILENAME].php >> /tmp/test.log';

确保您对定义的日志文件具有写入权限。

使用execbacktick 代替shell_exec。

【讨论】:

    最近更新 更多