You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用PHP passthru执行sudo多命令时无法后台运行的问题求助

使用PHP passthru执行sudo多命令时无法后台运行的问题求助

大家好,我最近碰到一个头疼的问题:用PHP的passthru()函数执行带sudo的多命令组合时,没法让进程真正在后台运行——脚本会一直等到命令执行完毕,才会输出“DONE”,完全达不到后台异步执行的效果。

以下是我的具体场景和代码细节:

  • 需求是用passthru以不同于当前运行用户的身份执行一组命令
  • 当前运行PHP代码的用户是dma22,目标执行用户是dm22
  • 需要执行的命令包含主程序运行和日志记录两个部分,都要切换到目标用户执行

我的PHP代码如下:

$webuser='dm22';
$webroot='/dm22';

/* 基础执行命令 */
$theCommand=sprintf('sudo -u %s php -c ./php.ini %s/mycmd.php $message<$msgFile', $webuser,$webroot,$message,$msgFile);

/* 追加日志记录命令 */
$theCommand .= sprintf(' | sudo -u %s tee -a %s', $webroot, $logFilePath); // 这里我怀疑可能是笔误,应该是$webuser?不过即使改成$webuser,后台运行的问题还是没解决

/* 试图让命令在后台运行 */
$theCommand .= ' & ';

passthru($theCommand);

echo "DONE";

问题详情

  • 代码执行后,页面会一直等待命令完全执行完,才会输出“DONE”,完全没有后台运行的效果
  • 我把生成的最终命令拿到终端里直接执行,是可以正常后台运行的,命令内容如下:
sudo -u dm22 php -c ./php.ini /dm22/mycmd.php msg2024</dm22/msg2024.raw | sudo -u dm22 tee -a /dm22/logs/msg2024.raw.log &

有没有朋友碰到过类似的情况?或者能帮我分析下问题出在哪吗?万分感谢!🙏

备注:内容来源于stack exchange,提问作者jd4u

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 06:20:37