成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

Web端執行服務器的命令和腳本

開發 前端
服務器端一般都是類Unix系統,以linux的CentOS使用為多,無論使用的是哪種類Unix系統,服務端都不會安裝窗口插件,而是使用命令和腳本來做一切事情,在這樣的場景下,登錄,執行命令,執行腳本,檢查服務運行狀態,檢查服務產生日志,檢查配置這些基本操作就會頻繁的用到,但在命令行模式下操作這些動作很繁瑣。

一、使用場景

服務器端一般都是類Unix系統,以linux的CentOS使用為多,無論使用的是哪種類Unix系統,服務端都不會安裝窗口插件,而是使用命令和腳本來做一切事情,在這樣的場景下,登錄,執行命令,執行腳本,檢查服務運行狀態,檢查服務產生日志,檢查配置這些基本操作就會頻繁的用到,但在命令行模式下操作這些動作很繁瑣。比如檢查某個服務是否是運行狀態,需要先登錄服務器,然后在進程中再查找該服務的進程是否存在。這里就介紹怎樣通過web端來執行服務器端動作的方法,簡化操作,提升工作效率。

二、選取實現方式

設計這個實現時比較了兩個實現方式:

1、通過java的Runtime類,執行命令和腳本。需要創建和維護一個工程,在工程里對接口權限控制也方便,但新加腳本和操作時需要修改工程,重新發布工程。

2、使用CGI接口,配置便捷,使用靈活,直接在服務器上寫腳本,通過接口的通用路徑就可以訪問使用,但無法控制接口訪問權限。

由于這個接口是使用在測試系統,方便,靈活是首選,權限問題就顯示的不那么重要了。

CGI是一個很古老的技術,后來隨著java servlet技術的興起,在生產場景已經沒有CGI的一點空間了,但它的靈活,便捷正好用在測試環境上。

三、配置CGI接口

3.1、開啟tomcat的CGI配置

tomcat和apache等中間件已經內置了CGI功能,只是默認是非啟用狀態。此處以tomcat為例,配置CGI接口。

修改點1、在Tomcat的 conf/web.xml 中釋放下面CGI相關的兩段內容

第一段:

<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>

第二段:

<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>/cgi-bin/*</url-pattern>

</servlet-mapping>

修改點2、在Tomcat的 conf/context.xml 中給標簽增加屬性。

在</Context>標簽中添加屬性 privileged = "true",因為默認情況下Tomcat是不允許web應用使用容器內的Servlet的,web應用只能使用自己項目的Servlet。

3.2、創建一個空項目,定義要執行的腳本

tomcat中開啟CGI配置時,沒有修改文件路徑和訪問路徑,那空項目就按照默認路徑創建目錄即可。

在tomcat路徑下,直接 mkdir -p webapps/test/WEB-INF/cgi,創建CGI項目目錄完畢。

然后在webapps/test/WEB-INF/cgi路徑下創建一個文件a,a的內容如下

Web端執行服務器的命令和腳本
2022-08-15 09:28·陳明chenm
一、使用場景
服務器端一般都是類Unix系統,以linux的CentOS使用為多,無論使用的是哪種類Unix系統,服務端都不會安裝窗口插件,而是使用命令和腳本來做一切事情,在這樣的場景下,登錄,執行命令,執行腳本,檢查服務運行狀態,檢查服務產生日志,檢查配置這些基本操作就會頻繁的用到,但在命令行模式下操作這些動作很繁瑣。比如檢查某個服務是否是運行狀態,需要先登錄服務器,然后在進程中再查找該服務的進程是否存在。這里就介紹怎樣通過web端來執行服務器端動作的方法,簡化操作,提升工作效率。

二、選取實現方式
設計這個實現時比較了兩個實現方式:

1、通過java的Runtime類,執行命令和腳本。需要創建和維護一個工程,在工程里對接口權限控制也方便,但新加腳本和操作時需要修改工程,重新發布工程。

2、使用CGI接口,配置便捷,使用靈活,直接在服務器上寫腳本,通過接口的通用路徑就可以訪問使用,但無法控制接口訪問權限。

由于這個接口是使用在測試系統,方便,靈活是首選,權限問題就顯示的不那么重要了。

CGI是一個很古老的技術,后來隨著java servlet技術的興起,在生產場景已經沒有CGI的一點空間了,但它的靈活,便捷正好用在測試環境上。

三、配置CGI接口
3.1、開啟tomcat的CGI配置
tomcat和apache等中間件已經內置了CGI功能,只是默認是非啟用狀態。此處以tomcat為例,配置CGI接口。

修改點1、在Tomcat的 conf/web.xml 中釋放下面CGI相關的兩段內容

第一段:



<servlet>

<servlet-name>cgi</servlet-name>

<servlet-class>org.apache.catalina.servlets.CGIServlet</servlet-class>

<init-param>

<param-name>cgiPathPrefix</param-name>

<param-value>WEB-INF/cgi</param-value>

</init-param>

<load-on-startup>5</load-on-startup>

</servlet>

第二段:



<servlet-mapping>

<servlet-name>cgi</servlet-name>

<url-pattern>/cgi-bin/*</url-pattern>

</servlet-mapping>

修改點2、在Tomcat的 conf/context.xml 中給標簽增加屬性。

</Context>標簽中添加屬性 privileged = "true",因為默認情況下Tomcat是不允許web應用使用容器內的Servlet的,web應用只能使用自己項目的Servlet。

3.2、創建一個空項目,定義要執行的腳本
tomcat中開啟CGI配置時,沒有修改文件路徑和訪問路徑,那空項目就按照默認路徑創建目錄即可。

在tomcat路徑下,直接 mkdir -p webapps/test/WEB-INF/cgi,創建CGI項目目錄完畢。

然后在webapps/test/WEB-INF/cgi路徑下創建一個文件a,a的內容如下



#!/bin/bash

echo "Content-Type: text/plain"

echo

#上面內容是CGI腳本格式,必須存在



#下面內容是自定義要執行的動作

echo "Today is:"

date

3.3、執行a的接口訪問路徑

http://localhost:8080/test/cgi-bin/a

四、參數化cgi接口

4.1、實際場景

此時,CGI接口已經配置完畢了,盡管功能已經完畢,但還是不滿足實際的使用場景,現在的一個接口只對應一個功能,不能復用。要滿足實際的使用場景,就要參數化,傳遞的參數可以是腳本名稱,機器的ip,服務名稱,進程名稱等等,這樣接口的通用性就大大增加了。

4.2、初步解決方案

若想腳本參數化就要解決服務器端的傳參和url中傳參不一致的問題。url中使用“&”和“參數名=參數值”的傳參形式,而服務器端是使用的是空格+直接參數值得形式。需要在執行的a腳本前,先經過一個轉換腳本,轉換腳本需要先切割url,分成幾部分,取出參數和執行的a腳本,再重新拼在一起來執行,那就變成url需要先訪問轉換腳本,把實際的a腳本和參數都作為參數傳進來,處理流程變復雜了。

4.3、網上一個神腳本

直到后來在互聯網上最終找到了一個完美的解決方案。找到了一個名字叫“proccgi.sh”的腳本,腳本里的注釋中描述是 Frank Pilhofer在1995年寫的。我原封不動的拿過來使用了(腳本下載:鏈接:https://pan.baidu.com/s/1oZbN13Eog3OKld93f6hEkw?pwd=chen,提取碼:chen)。這個腳本設計的很巧妙,它不在傳輸中間處理url再拼接,而是把url直接都傳進執行的a腳本里,然后在a腳本中利用了“eval”命令的的二次掃描功能,掃描出需要的參數,然后把參數放一個特殊的key-value形式的環境變量里,使用的時候直接從環境變量里面去取。

例如:

url:http://localhost:8080/test/cgi-bin/a?ip=115&servername=customer&thread=aabbcc

a腳本改造如下:

#!/bin/bash



eval `proccgi.sh $*` # 解析參數

echo "Content-Type: text/plain"

echo



# ############

echo $FORM_ip

echo $FORM_servername

echo $FORM_thread

五、Web頁面處理

有以下幾種情況:

1、對頁面展示無樣式要求的,接口鏈接直接新開瀏覽器窗口,接口返回的數據會直接顯示在瀏覽器中。

2、頁面有格式的,需要通過ajax觸發接口,接口返回值通過innerHTML直接填充到頁面的展示區域。

3、對于那些耗時較長的任務,接口在還沒有返回值的時候,頁面停留在加載狀態,此時從頁面也無法判斷是否出現未知問題。這時可以給頁面放一個等待的圖片,定義一個標志位給它放一個默認值,然后js輪訓判斷這個標志位的值,當接口的shell處理完成,接口返回時,要變更標志位的值,輪訓發現變更后,就可以把接口返回內容替換掉等待圖片全部顯示在頁面上了。

六、結語

在定義環境的時候,就盡量定義的通用一些,規律一些。這樣可以維護一些通用腳本,通過傳入變量參數來做動作。使在服務器中環境維護和定位問題都不再繁瑣。?

責任編輯:華軒 來源: 今日頭條
相關推薦

2019-02-26 16:20:52

FTP服務器

2010-03-30 18:26:07

Nginx Web服務

2012-02-23 10:02:08

Web服務器應用服務器

2018-12-07 08:38:49

代理服務器Web服務器通信

2009-06-08 10:30:00

ASP腳本服務器

2011-08-08 14:31:49

服務器

2009-07-02 13:46:17

JSP引擎Web服務器

2010-05-18 15:22:37

IIS服務器

2011-07-07 15:43:51

服務器安裝

2009-07-09 10:25:05

Servlet的Web

2017-12-29 09:47:11

Web服務器萬維網

2017-11-10 08:58:49

Web服務器應用程序

2021-11-24 08:00:00

服務器Web系統

2009-07-28 10:43:23

Web服務器ASP.NET

2010-05-13 18:32:52

2018-01-18 10:57:48

Linux服務器命令

2011-11-22 11:13:34

2010-03-30 16:59:12

Nginx Web服務

2021-07-27 06:14:32

服務器端移動端性能測試

2022-12-13 07:40:33

LinuxWeb服務器
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲一区视频 | 噜啊噜在线 | 激情影院久久 | 久久久久1| 日韩欧美中文字幕在线观看 | 国产一区二区三区 | 亚洲欧美高清 | a久久| 国产一区二区三区精品久久久 | 综合一区二区三区 | 天天操天天干天天爽 | 日韩欧美国产不卡 | 天天综合永久入口 | 久久久久久久综合 | 狠狠操天天干 | 一区二区三区在线 | av黄色免费 | 亚洲高清在线观看 | 超碰欧美 | 国产欧美一区二区三区在线看 | 欧美成视频 | 青娱乐自拍 | а天堂中文最新一区二区三区 | 日韩一级黄色毛片 | 精品av | 日韩在线欧美 | 国产资源一区二区三区 | 国产精品一区在线 | 天天操欧美 | 日韩精品一区二区三区中文字幕 | 久久999 | 国产高清免费在线 | 在线一级片 | 九色在线观看 | 国产福利资源在线 | 国产精品视频一区二区三区 | 成人久久网 | 婷婷久久综合 | 91久久精品国产91久久性色tv | 成人精品一区二区三区中文字幕 | 国产精品1区2区3区 中文字幕一区二区三区四区 |