2012-08-02 64 views
-1

這可能是一個愚蠢的問題,但能夠做到這一點非常棒。我在我的網站上有一個自定義的管理部分。我有一個cron作業設置爲每天運行一次這個文件/opt/webalizerScript.sh但是,我希望能夠隨時從我的管理部分執行該命令,我希望從webalizer獲得全新的流量統計信息。我不想編輯cron,因爲我不打算經常手動執行該腳本,並且每天一次對於自動化目的而言是很好的。當然,我知道我可以在shell中執行腳本,但是這會否定我正在嘗試執行的全部目的。有沒有辦法通過點擊網頁上的鏈接來執行bash命令腳本?

+0

是什麼語言使用在服務器端的您的網站? – mariusnn 2012-08-02 01:41:01

+0

英文。編程我想使用PHP或Perl。 – Garry 2012-08-02 15:31:03

回答

2

雖然Amadan的回答是一個很好的概述,但我想我會放入一個簡單的PHP腳本作爲示範。該腳本假定bash將是您的Web服務器的默認外殼。

demo.php運行「LS -alFh」,但你可以代替任何命令

<html> 
    <head> 
    <title>Output of my bash script</title> 
    </head> 
    <body> 
    <h1>Output of my bash script</h1> 
<pre> 
<?php system("ls -alFh", $rc); ?> 
</pre> 
    <br> 
    <?php echo "Return Code: {$rc}\n"; ?> 
    </body> 
</html> 
+0

太棒了......謝謝!有沒有一種方法可以在頁面上進行冗長的處理,以便我可以像在shell中一樣查看它的發生?這就是爲什麼我有:'<?php system(「/ opt/webalizerScript.sh」,$ rc); 「它完美無缺,但腳本需要一些時間來處理,能夠觀看它的過程會很棒。 – Garry 2012-08-02 02:30:45

+0

它只能輸出你的腳本輸出的內容。你的腳本是否會採用--verbose或其他的?在命令字符串的末尾添加任何額外的參數,就像在提示符處鍵入它一樣。你可以添加一些東西來顯示它的進度(如echo命令)嗎? system()將逐行刷新輸出行。見http://php.net/manual/en/function.system.php – walrii 2012-08-02 02:44:38

+0

它沒有。只是有一堆這些行,每行更新我服務器上每個網站的webalizer統計信息。以下是第一行的示例:'#!/ bin/sh webalizer -n clarksvillecomputers.com -o /var/www/clarksvillecomputers.com/public_html/webalizer/var/www/clarksvillecomputers.com/logs/access。日誌 ' – Garry 2012-08-02 02:49:06

2

執行腳本作爲對HTTP請求的響應是CGI的定義。

您的腳本將收到一些環境變量以反映請求的細節和一些標準輸入。最後,無論它輸出什麼都會發送給客戶端。您必須輸出Content-Type: text-plain(或其他內容類型),然後在開始處輸入空白行。

調查配置您的網絡服務器爲服務CGI;在Apache中,您很可能只需將腳本放入cgi-bin目錄中。

這應該足以讓你開始。有關CGI的大量教程可獲取更多信息。

相關問題