在 Ubuntu 上通过 PHP exec 执行命令

Executing commands via PHP exec on Ubuntu

提问人:Nimesh 提问时间:11/4/2023 最后编辑:OlivierNimesh 更新时间:11/5/2023 访问量:74

问:

我想通过 PHP exec() 运行一个 linux 命令,下面我的第一个命令在 Ubuntu Server 22.04 的后台完美地执行 -

<?php
$cmd = "java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar hub";
exec($cmd . " > /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 . " > /dev/null &");
?> 

我无法找出不工作的原因。有人请帮忙吗?

检查了PHP的所有必要权限,没有权限问题。第一个命令执行完美,但第二个命令执行不完美。

php ubuntu 硒网格

评论

0赞 Adi 11/4/2023
尝试$cmd = "nohup java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --selenium-manager true > /dev/null 2>&1 &"; exec($cmd);
0赞 Barmar 11/4/2023
这些命令应该做什么?这个参数对 Java 程序意味着什么?node
1赞 Barmar 11/4/2023
@ChrisHaas 但是为什么它适用于一个 java 命令而不适用于另一个呢?它们都运行相同的 JAR 文件,只是参数不同。
1赞 Chris Haas 11/4/2023
@Barmar,老实说,我最初只是把我的评论作为常见问题的一揽子包罗万象。但是,查看文档时,参数显示“在启动期间,节点将检测它可以从系统中使用的可用驱动程序”,所以这是我最好的猜测nodePATH
1赞 Chris Haas 11/4/2023
一,您可以手动创建目录吗?第二,检查运行PHP的用户/组的权限。第三,尝试运行带有或类似 jar 的 jar,看看是否可以指定可以控制的缓存文件夹。—help

答:

0赞 Nimesh 11/5/2023 #1

我在@ChrisHaas的评论的帮助下解决了这个问题 实际问题与 www-data (Apache2) 访问目录的正确权限有关。我允许该目录,例如 -

sudo chmod -R 777 /var/www/html/selenium-drivers

然后我可以执行命令

<?php
$cmd = "java -jar /var/www/html/selenium-drivers/selenium-server-4.14.1.jar node --port 5555 --selenium-manager true";
exec($cmd . " > /dev/null &");
?>

评论

1赞 Don't Panic 11/5/2023
太好了,你解决了问题(不要忘记接受/赞成你的答案,以便未来的访问者可以看到它很有帮助)。请注意,尽管使用 777 权限很危险,但您不应该这样做。运行 Web 服务器的用户是需要写入权限的用户,对吗?因此,只有该用户需要写入权限。
0赞 Nimesh 11/7/2023
是的。你是对的。谢谢