PHP浏览器端脚本调用exec()后后续代码未执行的问题排查求助
PHP浏览器端脚本调用exec()后后续代码未执行的问题排查求助
各位好,我遇到了一个棘手的问题,想请大家帮忙分析排查下。先贴一段简化后的核心代码:
<?php $output = []; $fd=try_lock($file); // 内部通过flock()实现,使用LOCK_EX和LOCK_NB标志加锁 if (is_null($fd)) { $input_errors[] = gettext("A CRL update is currently running, try again later."); } else { echo "before exec"; exec("/usr/local/bin/php -f /etc/rc.update_crl -- locked", $output); if (empty($output)) { print_info_box(gettext("CRL Update terminated successfully."), "success"); } else { $input_errors = $output; } } unlock($fd); // 通过上面获取的文件描述符释放锁 echo "after exec"; ?>
具体问题:
- 这段PHP脚本是在浏览器(推测是Chrome)环境下运行的,但偶尔会出现
exec()调用之后的所有代码都不执行的情况——包括判断$output的逻辑、unlock($fd)以及最后的echo "after exec"完全没有输出。 - 我尝试过替换成
system()或者shell_exec()执行命令,问题依然存在。 - 如果给exec的命令末尾加上
&让它后台运行,后续代码倒是能正常执行,但这样会导致锁提前被释放(主脚本会继续往下走流程),不符合业务逻辑,所以这个方案不可行。 - 已经确认
try_lock和unlock函数工作正常,锁相关的逻辑没有问题。
我搜了一圈没找到类似的案例,想问问大家有没有遇到过类似情况?会不会是浏览器相关的机制导致脚本中途中断了?
内容来源于stack exchange
相关产品推荐
相关产品推荐

