[英]Running Shell Script from PHP Page
我想做的是:
當查看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:
但是沒有 python_script.py
的輸出,我可以檢查一下,該腳本是否在另一個上未被調用機。
任何想法,我想念的是什么? 我很高興為您提供任何幫助! :)
UPDATE
感謝您的快速回復。 對不起,我自己不夠清楚。
首先:這不是用於公共/商業/精心制作的網站,而是用於私人娛樂,並且mydomain.com
被auth_basic
鎖定。
我的設置: Server1
托管mydomain.com
。 Server2
正在運行一些用於私人娛樂的內容,例如智能家居軟件和Telegram機器人。
我想做的是:調用mydomain.com/index.php
,我想將相同的參數(實際上只是True
或False
)保存到Server2
,以將它們用於在那里運行的某些腳本。 Server1
和Server2
在同一個局域網中,但是從外部只能訪問Server1
,因此可以通過SSH登錄並運行Python腳本。
感謝您提供有關如何更好地執行此操作或使我的嵌入式解決方案工作的建議。 :)
更新2:
感謝symcbean指出腳本中的錯誤。 我必須承認,我從其他stackoverflow線程復制並粘貼了它。
也感謝ADyson指出了解決此問題的更好方法。 對於大型項目,我一定會牢記在心。
同時,我能夠運行腳本。 它仍然是非常基本的,不跟蹤Python腳本的執行並且不處理錯誤。 再一次,我不想指出,我僅將其用於私人用途,而mydomain.com/index.php
將僅在有限的時間內可用(它將是安萬德壓光機,聖誕節后將脫機)。 但是為了完整起見,這是我想到的:
#!/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
expect "assword:"
send "PWD\r"
expect "*\$ "
send "$cmd $file $content\r"
expect "*\$*"
send "exit\r"
interact
在您到達這一點之前,先撇開特殊的選擇,當期望腳本到達
interact
?
您的shell腳本中沒有啟動python腳本,跟蹤其執行或退出shell的內容。 同時,您的PHP代碼被阻止,直到本地腳本退出。
盡管有很多方法可以解決此問題,但我仍然不願提出任何建議,而又不能更好地理解您為什么選擇了這種復雜的機制來處理調用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.