使用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
相关产品推荐
相关产品推荐

