新聞中心
一、使用場(chǎng)景
服務(wù)器端一般都是類Unix系統(tǒng),以linux的CentOS使用為多,無(wú)論使用的是哪種類Unix系統(tǒng),服務(wù)端都不會(huì)安裝窗口插件,而是使用命令和腳本來(lái)做一切事情,在這樣的場(chǎng)景下,登錄,執(zhí)行命令,執(zhí)行腳本,檢查服務(wù)運(yùn)行狀態(tài),檢查服務(wù)產(chǎn)生日志,檢查配置這些基本操作就會(huì)頻繁的用到,但在命令行模式下操作這些動(dòng)作很繁瑣。比如檢查某個(gè)服務(wù)是否是運(yùn)行狀態(tài),需要先登錄服務(wù)器,然后在進(jìn)程中再查找該服務(wù)的進(jìn)程是否存在。這里就介紹怎樣通過(guò)web端來(lái)執(zhí)行服務(wù)器端動(dòng)作的方法,簡(jiǎn)化操作,提升工作效率。

成都創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),龍游企業(yè)網(wǎng)站建設(shè),龍游品牌網(wǎng)站建設(shè),網(wǎng)站定制,龍游網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,龍游網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
二、選取實(shí)現(xiàn)方式
設(shè)計(jì)這個(gè)實(shí)現(xiàn)時(shí)比較了兩個(gè)實(shí)現(xiàn)方式:
1、通過(guò)java的Runtime類,執(zhí)行命令和腳本。需要?jiǎng)?chuàng)建和維護(hù)一個(gè)工程,在工程里對(duì)接口權(quán)限控制也方便,但新加腳本和操作時(shí)需要修改工程,重新發(fā)布工程。
2、使用CGI接口,配置便捷,使用靈活,直接在服務(wù)器上寫腳本,通過(guò)接口的通用路徑就可以訪問(wèn)使用,但無(wú)法控制接口訪問(wèn)權(quán)限。
由于這個(gè)接口是使用在測(cè)試系統(tǒng),方便,靈活是選擇,權(quán)限問(wèn)題就顯示的不那么重要了。
CGI是一個(gè)很古老的技術(shù),后來(lái)隨著java servlet技術(shù)的興起,在生產(chǎn)場(chǎng)景已經(jīng)沒(méi)有CGI的一點(diǎn)空間了,但它的靈活,便捷正好用在測(cè)試環(huán)境上。
三、配置CGI接口
3.1、開啟tomcat的CGI配置
tomcat和apache等中間件已經(jīng)內(nèi)置了CGI功能,只是默認(rèn)是非啟用狀態(tài)。此處以tomcat為例,配置CGI接口。
修改點(diǎn)1、在Tomcat的 conf/web.xml 中釋放下面CGI相關(guān)的兩段內(nèi)容
第一段:
cgi org.apache.catalina.servlets.CGIServlet cgiPathPrefix WEB-INF/cgi 5
第二段:
cgi /cgi-bin/*
修改點(diǎn)2、在Tomcat的 conf/context.xml 中給標(biāo)簽增加屬性。
在標(biāo)簽中添加屬性 privileged = "true",因?yàn)槟J(rèn)情況下Tomcat是不允許web應(yīng)用使用容器內(nèi)的Servlet的,web應(yīng)用只能使用自己項(xiàng)目的Servlet。
3.2、創(chuàng)建一個(gè)空項(xiàng)目,定義要執(zhí)行的腳本
tomcat中開啟CGI配置時(shí),沒(méi)有修改文件路徑和訪問(wèn)路徑,那空項(xiàng)目就按照默認(rèn)路徑創(chuàng)建目錄即可。
在tomcat路徑下,直接 mkdir -p webapps/test/WEB-INF/cgi,創(chuàng)建CGI項(xiàng)目目錄完畢。
然后在webapps/test/WEB-INF/cgi路徑下創(chuàng)建一個(gè)文件a,a的內(nèi)容如下
Web端執(zhí)行服務(wù)器的命令和腳本
2022-08-15 09:28·陳明chenm
一、使用場(chǎng)景
服務(wù)器端一般都是類Unix系統(tǒng),以linux的CentOS使用為多,無(wú)論使用的是哪種類Unix系統(tǒng),服務(wù)端都不會(huì)安裝窗口插件,而是使用命令和腳本來(lái)做一切事情,在這樣的場(chǎng)景下,登錄,執(zhí)行命令,執(zhí)行腳本,檢查服務(wù)運(yùn)行狀態(tài),檢查服務(wù)產(chǎn)生日志,檢查配置這些基本操作就會(huì)頻繁的用到,但在命令行模式下操作這些動(dòng)作很繁瑣。比如檢查某個(gè)服務(wù)是否是運(yùn)行狀態(tài),需要先登錄服務(wù)器,然后在進(jìn)程中再查找該服務(wù)的進(jìn)程是否存在。這里就介紹怎樣通過(guò)web端來(lái)執(zhí)行服務(wù)器端動(dòng)作的方法,簡(jiǎn)化操作,提升工作效率。
二、選取實(shí)現(xiàn)方式
設(shè)計(jì)這個(gè)實(shí)現(xiàn)時(shí)比較了兩個(gè)實(shí)現(xiàn)方式:
1、通過(guò)java的Runtime類,執(zhí)行命令和腳本。需要?jiǎng)?chuàng)建和維護(hù)一個(gè)工程,在工程里對(duì)接口權(quán)限控制也方便,但新加腳本和操作時(shí)需要修改工程,重新發(fā)布工程。
2、使用CGI接口,配置便捷,使用靈活,直接在服務(wù)器上寫腳本,通過(guò)接口的通用路徑就可以訪問(wèn)使用,但無(wú)法控制接口訪問(wèn)權(quán)限。
由于這個(gè)接口是使用在測(cè)試系統(tǒng),方便,靈活是選擇,權(quán)限問(wèn)題就顯示的不那么重要了。
CGI是一個(gè)很古老的技術(shù),后來(lái)隨著java servlet技術(shù)的興起,在生產(chǎn)場(chǎng)景已經(jīng)沒(méi)有CGI的一點(diǎn)空間了,但它的靈活,便捷正好用在測(cè)試環(huán)境上。
三、配置CGI接口
3.1、開啟tomcat的CGI配置
tomcat和apache等中間件已經(jīng)內(nèi)置了CGI功能,只是默認(rèn)是非啟用狀態(tài)。此處以tomcat為例,配置CGI接口。
修改點(diǎn)1、在Tomcat的 conf/web.xml 中釋放下面CGI相關(guān)的兩段內(nèi)容
第一段:cgi org.apache.catalina.servlets.CGIServlet cgiPathPrefix WEB-INF/cgi 5
第二段:cgi /cgi-bin/*
修改點(diǎn)2、在Tomcat的 conf/context.xml 中給標(biāo)簽增加屬性。
在標(biāo)簽中添加屬性 privileged = "true",因?yàn)槟J(rèn)情況下Tomcat是不允許web應(yīng)用使用容器內(nèi)的Servlet的,web應(yīng)用只能使用自己項(xiàng)目的Servlet。
3.2、創(chuàng)建一個(gè)空項(xiàng)目,定義要執(zhí)行的腳本
tomcat中開啟CGI配置時(shí),沒(méi)有修改文件路徑和訪問(wèn)路徑,那空項(xiàng)目就按照默認(rèn)路徑創(chuàng)建目錄即可。
在tomcat路徑下,直接 mkdir -p webapps/test/WEB-INF/cgi,創(chuàng)建CGI項(xiàng)目目錄完畢。
然后在webapps/test/WEB-INF/cgi路徑下創(chuàng)建一個(gè)文件a,a的內(nèi)容如下
#!/bin/bash
echo "Content-Type: text/plain"
echo
#上面內(nèi)容是CGI腳本格式,必須存在
#下面內(nèi)容是自定義要執(zhí)行的動(dòng)作
echo "Today is:"
date
3.3、執(zhí)行a的接口訪問(wèn)路徑
http://localhost:8080/test/cgi-bin/a
四、參數(shù)化cgi接口
4.1、實(shí)際場(chǎng)景
此時(shí),CGI接口已經(jīng)配置完畢了,盡管功能已經(jīng)完畢,但還是不滿足實(shí)際的使用場(chǎng)景,現(xiàn)在的一個(gè)接口只對(duì)應(yīng)一個(gè)功能,不能復(fù)用。要滿足實(shí)際的使用場(chǎng)景,就要參數(shù)化,傳遞的參數(shù)可以是腳本名稱,機(jī)器的ip,服務(wù)名稱,進(jìn)程名稱等等,這樣接口的通用性就大大增加了。
4.2、初步解決方案
若想腳本參數(shù)化就要解決服務(wù)器端的傳參和url中傳參不一致的問(wèn)題。url中使用“&”和“參數(shù)名=參數(shù)值”的傳參形式,而服務(wù)器端是使用的是空格+直接參數(shù)值得形式。需要在執(zhí)行的a腳本前,先經(jīng)過(guò)一個(gè)轉(zhuǎn)換腳本,轉(zhuǎn)換腳本需要先切割url,分成幾部分,取出參數(shù)和執(zhí)行的a腳本,再重新拼在一起來(lái)執(zhí)行,那就變成url需要先訪問(wèn)轉(zhuǎn)換腳本,把實(shí)際的a腳本和參數(shù)都作為參數(shù)傳進(jìn)來(lái),處理流程變復(fù)雜了。
4.3、網(wǎng)上一個(gè)神腳本
直到后來(lái)在互聯(lián)網(wǎng)上最終找到了一個(gè)完美的解決方案。找到了一個(gè)名字叫“proccgi.sh”的腳本,腳本里的注釋中描述是 Frank Pilhofer在1995年寫的。我原封不動(dòng)的拿過(guò)來(lái)使用了(腳本下載:鏈接:https://pan.baidu.com/s/1oZbN13Eog3OKld93f6hEkw?pwd=chen,提取碼:chen)。這個(gè)腳本設(shè)計(jì)的很巧妙,它不在傳輸中間處理url再拼接,而是把url直接都傳進(jìn)執(zhí)行的a腳本里,然后在a腳本中利用了“eval”命令的的二次掃描功能,掃描出需要的參數(shù),然后把參數(shù)放一個(gè)特殊的key-value形式的環(huán)境變量里,使用的時(shí)候直接從環(huán)境變量里面去取。
例如:
url:http://localhost:8080/test/cgi-bin/a?ip=115&servername=customer&thread=aabbcc
a腳本改造如下:
#!/bin/bash
eval `proccgi.sh $*` # 解析參數(shù)
echo "Content-Type: text/plain"
echo
# ############
echo $FORM_ip
echo $FORM_servername
echo $FORM_thread
五、Web頁(yè)面處理
有以下幾種情況:
1、對(duì)頁(yè)面展示無(wú)樣式要求的,接口鏈接直接新開瀏覽器窗口,接口返回的數(shù)據(jù)會(huì)直接顯示在瀏覽器中。
2、頁(yè)面有格式的,需要通過(guò)ajax觸發(fā)接口,接口返回值通過(guò)innerHTML直接填充到頁(yè)面的展示區(qū)域。
3、對(duì)于那些耗時(shí)較長(zhǎng)的任務(wù),接口在還沒(méi)有返回值的時(shí)候,頁(yè)面停留在加載狀態(tài),此時(shí)從頁(yè)面也無(wú)法判斷是否出現(xiàn)未知問(wèn)題。這時(shí)可以給頁(yè)面放一個(gè)等待的圖片,定義一個(gè)標(biāo)志位給它放一個(gè)默認(rèn)值,然后js輪訓(xùn)判斷這個(gè)標(biāo)志位的值,當(dāng)接口的shell處理完成,接口返回時(shí),要變更標(biāo)志位的值,輪訓(xùn)發(fā)現(xiàn)變更后,就可以把接口返回內(nèi)容替換掉等待圖片全部顯示在頁(yè)面上了。
六、結(jié)語(yǔ)
在定義環(huán)境的時(shí)候,就盡量定義的通用一些,規(guī)律一些。這樣可以維護(hù)一些通用腳本,通過(guò)傳入變量參數(shù)來(lái)做動(dòng)作。使在服務(wù)器中環(huán)境維護(hù)和定位問(wèn)題都不再繁瑣。?
分享文章:Web端執(zhí)行服務(wù)器的命令和腳本
網(wǎng)站地址:http://m.fisionsoft.com.cn/article/cdogcdi.html


咨詢
建站咨詢
