从PHP页面运行Shell脚本

时间:2018-11-05 09:34:32

标签: php ssh shell-exec

我想做什么:

查看mydomain.com/index.php时,运行一个脚本,该脚本登录服务器本地网络中的另一台计算机(与服务index.php的计算机不同)并运行Python脚本。

我到目前为止所拥有的:

index.php我打电话

shell_exec('/var/www/dir/save.sh '.$ARG1.' '.$ARG2);

脚本save.sh

#!/usr/bin/expect -f
set cmd "python /path/to/python_script.py"
set file [lindex $argv 0]
set content [lindex $argv 1]

spawn ssh usr@local_ip "$cmd $file $content"
expect "assword:"
send "PWD\r"
interact

我运行了sudo chmod www-data+x save.sh以使PHP-Site可以运行命令。当我在终端中运行sudo -u www-data ./save.sh arg1 arg2时,一切都按预期方式工作,并且可以看到python_script.py的输出(我打印进行测试)。

但是,当调用index.php并回显shell_exec-Call的输出时,我看到直到user@ip's password:为止的所有内容,但不是 {{ 1}},我可以检查该脚本是否尚未在另一台计算机上调用。

任何想法,我想念的是什么? 我很高兴为您提供任何帮助! :)


更新

感谢您的快速回复。对不起,我自己不够清楚。

首先:不是用于公共/商业/精致网站,而是用于私人娱乐,并且python_script.pymydomain.com锁定。

我的设置:auth_basic正在托管Server1mydomain.com正在运行一些用于私人娱乐的内容,例如智能家居软件和Telegram机器人。

我想做什么:调用Server2时,我想将相同的参数(实际上只是mydomain.com/index.phpTrue)保存到False,以用于一些在那里运行的脚本。 Server2Server1在同一个局域网中,但是只有Server2可以从外部访问,因此可以通过SSH登录并运行Python脚本。

我非常感谢您提供有关如何更好地执行此操作或使我的嵌入式解决方案正常工作的建议。 :)


更新2:

感谢symcbean指出脚本中的错误。我必须承认,我从其他stackoverflow线程复制并粘贴了它。

也感谢ADyson指出了解决此问题的更好方法。对于大型项目,我一定会牢记在心。

同时,我能够运行脚本。它仍然是非常基本的,不跟踪Python脚本的执行并且不处理错误。再一次,我不想指出,我仅将其用于私人用途,Server1仅在有限的时间内可用(它将是安万德压光机,圣诞节后将脱机使用)。但是为了完整起见,这是我想出的:

mydomain.com/index.php

1 个答案:

答案 0 :(得分:0)

在此之前,请忽略特殊的选择,当期望脚本到达时,您期望发生的确切情况是

interact

shell脚本中没有启动python脚本,跟踪其执行或退出shell的内容。同时,您的PHP代码被阻止,直到本地脚本退出。

尽管有很多解决此问题的方法,但我还是不愿提出任何建议,以使您更好地理解为什么选择如此复杂的机制来处理调用。

相关问题