我想做什么:
查看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.py
被mydomain.com
锁定。
我的设置:auth_basic
正在托管Server1
。 mydomain.com
正在运行一些用于私人娱乐的内容,例如智能家居软件和Telegram机器人。
我想做什么:调用Server2
时,我想将相同的参数(实际上只是mydomain.com/index.php
或True
)保存到False
,以用于一些在那里运行的脚本。 Server2
和Server1
在同一个局域网中,但是只有Server2
可以从外部访问,因此可以通过SSH登录并运行Python脚本。
我非常感谢您提供有关如何更好地执行此操作或使我的嵌入式解决方案正常工作的建议。 :)
更新2:
感谢symcbean指出脚本中的错误。我必须承认,我从其他stackoverflow线程复制并粘贴了它。
也感谢ADyson指出了解决此问题的更好方法。对于大型项目,我一定会牢记在心。
同时,我能够运行脚本。它仍然是非常基本的,不跟踪Python脚本的执行并且不处理错误。再一次,我不想指出,我仅将其用于私人用途,Server1
仅在有限的时间内可用(它将是安万德压光机,圣诞节后将脱机使用)。但是为了完整起见,这是我想出的:
mydomain.com/index.php
答案 0 :(得分:0)
在此之前,请忽略特殊的选择,当期望脚本到达时,您期望发生的确切情况是
interact
?
shell脚本中没有启动python脚本,跟踪其执行或退出shell的内容。同时,您的PHP代码被阻止,直到本地脚本退出。
尽管有很多解决此问题的方法,但我还是不愿提出任何建议,以使您更好地理解为什么选择如此复杂的机制来处理调用。