国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 系統 > Linux > 正文

linux下shell腳本執行jar文件

2024-06-28 13:19:24
字體:
來源:轉載
供稿:網友
linux下shell腳本執行jar文件

最近在搞一個shell腳本啟動jar文件個關閉jar文件的東東。搞得我都蛋疼了。今天晚上終于弄好了

話說,小弟的linux只是剛入門,經過各方查資料終于搞定了。話不多說,下面開始上小弟寫的shell腳本

 1 #!/bin/bash 2 #description: 啟動重啟server服務  3 #端口號,根據此端口號確定PID   4 PORT=9997   5 #啟動命令所在目錄   6 HOME='/usr/etc/server/java/server'   7    8 #查詢出監聽了PORT端口TCP協議的程序   9 pid=`netstat -anp|grep $PORT|awk '{PRintf $7}'|cut -d/ -f1`  10   11   12 start(){  13    if [ -n "$pid" ]; then  14       echo "server already start,pid:$pid"  15       return 016    fi17    #進入命令所在目錄  18    cd $HOME  19    nohup java -jar $HOME/pserver9997.jar > $HOME/server.log 2>&1 &   #啟動聊天服務器 把日志輸出到HOME目錄的server.log文件中   20    echo "start at port:$PORT"  21 }  22   23 stop(){  24    if [ -z "$pid" ]; then  25       echo "not find program on port:$PORT"  26       return 027    fi28    #結束程序,使用訊號2,如果不行可以嘗試訊號9強制結束  29    kill -9 $pid30    rm -rf $pid31    echo "kill program use signal 2,pid:$pid"  32 }  33 status(){  34    if [ -z "$pid" ]; then  35       echo "not find program on port:$PORT"  36    else  37       echo "program is running,pid:$pid"  38    fi  39 }  40   41 case $1 in  42    start)  43       start  44    ;;  45    stop)  46       stop  47    ;;48    restart)  49       $0 stop50       sleep 251       $0 start52     ;;53    status)  54       status  55    ;;  56    *)  57       echo "Usage: {start|stop|status}"  58    ;;  59 esac  60   61 exit 0  

上面是小弟寫的shell腳本。寫的不好請見諒。

首先遇到的第一個坑

我在window下寫的 然后道linux中執行,在linux死活都說俺的19行有錯誤,俺就不明白了,哪里有錯,問了下別人,也說沒錯。突然有個高人問我在哪編寫的,小弟回答在win下,他告訴俺執行下這個命令:

dos2unix server.sh

然后小弟就執行了,說命令不存在,小弟只好安裝這個,執行了以下命令

yum install dos2unix

等他執行完了 小弟在執行dos2unix server.sh然后在執行.server.sh start ,

他居然奇跡的可以了。

小弟問了下是什么原因。人家高人,默默地回答了句,win下的換行跟linux下不一樣。小弟才疏學淺,智能默默地求助度娘了。

讓我找到了這個說法:

Linux和Windows和換行符不一樣。Windows下是CRLF(/r/n或0d0a),Linux下是LF(/n或0a)。在Linux下有時會遇到從Windows過來的文本文件,這些文件帶了Windows換行符,Linux下進行腳本處理時有可能會出一些莫名其妙的錯誤。因此需要將這些文件轉換為Linux換行符。

然后人家這個高人用了別的方法。具體的鏈接可以看下http://blog.chinaunix.net/uid-20726500-id-4492875.html然后俺就欣喜若狂了,終于可以了。

然而當我執行stop方法有出現坑了。

根本沒法執行,出現了如下的東東:

他居然說這個id沒有找到,小弟當時無語了,難道是他沒有找到要kill 的這個進程的id,有這個猜想,小弟果斷執行了以下命令:

小弟,當時目瞪口呆了,這個命令執行出來是什么啊。kill命令一般是 kill -9(當然這個是強制殺死) pid啊 這個不是啊 應該是kill -9 1556,想到這 我應該獲取的是1556這個pid,怎么獲取呢。小弟又請出我們偉大的度娘了,搜索了一番,終于讓我找到了這個命令:

netstat -anp|grep 9997|awk '{printf $7}'|cut -d/ -f1,截圖如下

這個值,才是俺想要的嘛,果斷改了下第7行的命令,改成了這個。小弟不才,直接用vim改的

然后wq保存,下面就是看下kill掉了嗎?

然后執行 server.sh stop命令, 在控制臺上輸出了

看到這個,應該是kill掉了。

至此已經完成了。

那么這個獲取pid命令,小弟還是不太懂 awk 是什么鬼?cut 倒是知道什么意思。

然后這時候又請出了神奇的度娘。多方打探、搜索,小弟搜到了這個

awk是一個強大的文本分析工具,相對于grep的查找,sed的編輯,awk在其對數據分析并生成報告時,顯得尤為強大。簡單來說awk就是把文件逐行的讀入,以空格為默認分隔符將每行切片,切開的部分再進行各種分析處理,具體鏈接請看下面的http://www.CUOXin.com/ggjucheng/archive/2013/01/13/2858470.html

通過這個鏈接大體的也了解了

它上面有個這個解釋此外,$0變量是指整條記錄。$1表示當前行的第一個域,$2表示當前行的第二個域,......以此類推

小弟有個這個awk '{printf $7}'

那么這個$7是啥意思呢,就是取到得得1556/java這個值,不信,自己屬下是不是第七個。

那么既然找到了這個那怎么取1556呢,如果是在java、php、js中很容易,但是在linux下呢,那么就需要cut命令了,cut顧名思義了,我也不多解釋了,

具體用法,可以參考如下文章

http://www.CUOXin.com/dong008259/archive/2011/12/09/2282679.html

他有一個-d 是自定義分隔符的,那么就可以cut -d/

這個的意思是js中的split差不多意思然后我再取第一個不就行了

總結起來就是 cut -d/ -f 1就取到這個值了。

通過這個,小弟確實學了不少,也了解到小弟linux的水平了。

下一步就是添加到定時任務中。

當然就是crontab

安裝crontab:yum install crontabs

說明:/sbin/service crond start //啟動服務/sbin/service crond stop //關閉服務/sbin/service crond restart //重啟服務/sbin/service crond reload //重新載入配置

查看crontab服務狀態:service crond status

手動啟動crontab服務:service crond start

查看crontab服務是否已設置為開機啟動,執行命令:ntsysv

加入開機自動啟動:chkconfig –level 35 crond on

1,crontab命令

功能說明:設置計時器。

語  法:crontab [-u <用戶名稱>][配置文件] 或 crontab [-u <用戶名稱>][-elr]

補充說明:cron是一個常駐服務,它提供計時器的功能,讓用戶在特定的時間得以執行預設的指令或程序。只要用戶會編輯計時器的配置文件,就可以使 用計時器的功能。其配置文件格式如下:Minute Hour Day Month DayOFWeek Command

參  數:-e  編輯該用戶的計時器設置。-l  列出該用戶的計時器設置。-r  刪除該用戶的計時器設置。-u<用戶名稱>  指定要設定計時器的用戶名稱。

2,crontab 格式

基本格式 :* *  *  *  *  command分 時 日 月 周  命令

第1列表示分鐘1~59 每分鐘用*或者 */1表示第2列表示小時1~23(0表示0點)第3列表示日期1~31第4列 表示月份1~12第5列標識號星期0~6(0表示星期天)第6列要運行的命令

# Use thehashsign to prefix a comment# +—————- minute (0 – 59)# | +————- hour (0 – 23)# | | +———- day of month (1 – 31)# | | | +——- month (1 – 12)# | | | | +—- day of week (0 – 7) (Sunday=0 or 7)# | | | | |# * * * * * command to be executed

加入crontab中0 22 * * * /root/sh/server.sh restart好了就是這些東東了。有錯誤請指正


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新余市| 斗六市| 安庆市| 威海市| 铜鼓县| 上蔡县| 乐安县| 洱源县| 安康市| 灌云县| 靖西县| 绥滨县| 丹棱县| 永善县| 格尔木市| 新民市| 井陉县| 陵水| 云安县| 建瓯市| 辽中县| 南京市| 札达县| 枞阳县| 舞钢市| 富川| 永定县| 广丰县| 安岳县| 甘洛县| 沂南县| 仙游县| 营口市| 白山市| 磐安县| 西贡区| 肇东市| 石泉县| 洱源县| 邻水| 无为县|