Ubuntu下PHP exec执行Selenium Node命令失败求助
排查PHP exec()无法启动Selenium Node的问题
第一步:捕获执行错误信息
你当前把输出直接丢去/dev/null,完全看不到失败原因。先修改代码把日志留存下来:
<?php $cmd = "java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --selenium-manager true"; // 把标准输出和错误输出都写入日志文件 exec($cmd . " > /var/www/html/selenium-node.log 2>&1 &"); ?>
查看/var/www/html/selenium-node.log,这里会直接显示执行失败的具体原因,是最有效的排查依据。
常见排查方向
- 端口占用:执行
ss -tulpn | grep 5555检查5555端口是否被其他进程占用。如果被占用,换个端口(比如5556)重试。 - Selenium Manager驱动下载问题:
--selenium-manager true会自动下载浏览器驱动,但运行PHP的用户(通常是www-data)可能没有下载权限,或者服务器网络无法访问驱动镜像源。可以手动下载对应浏览器的驱动(如ChromeDriver、GeckoDriver),放到/var/www/html/selenium-drivers/目录,然后修改命令指定驱动路径:$cmd = "java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --driver-path /var/www/html/selenium-drivers/"; - Java环境变量缺失:虽然Hub能启动,但Node命令可能因环境变量差异失败。直接指定Java绝对路径避免问题:
$cmd = "/usr/bin/java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --selenium-manager true"; - 权限细节:检查
/var/www/html/selenium-drivers/目录、jar文件及手动下载的驱动是否给www-data用户赋予了可读/可执行权限,比如执行chmod +x /var/www/html/selenium-drivers/chromedriver给驱动加执行权限。 - 后台进程稳定性:PHP脚本结束后可能会终止exec启动的后台进程,用
nohup加固后台运行:$cmd = "nohup /usr/bin/java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --selenium-manager true > /var/www/html/selenium-node.log 2>&1 &"; exec($cmd);
内容的提问来源于stack exchange,提问作者Nimesh
相关产品推荐
相关产品推荐

