簡體   English   中英

從PHP頁面運行Shell腳本

[英]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.comauth_basic鎖定。

我的設置: Server1托管mydomain.com Server2正在運行一些用於私人娛樂的內容,例如智能家居軟件和Telegram機器人。

我想做的是:調用mydomain.com/index.php ,我想將相同的參數(實際上只是TrueFalse )保存到Server2 ,以將它們用於在那里運行的某些腳本。 Server1Server2在同一個局域網中,但是從外部只能訪問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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM