linux下用shell指令碼啟動可執行.jar檔案並關閉的方法

來源:互聯網
上載者:User
話不多說,開始上代碼,為了偷懶,代碼只是截圖了,感興趣的朋友可以看了之後自己寫,這樣加深印象。



上面是小弟寫的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.cnblogs.com/ggjucheng/archive/2013/01/13/2858470.html

通過這個連結大體的也瞭解了

它上面有個這個解釋

此外,$0變數是指整條記錄。$1表示當前行的第一個域,$2表示當前行的第二個域,......以此類推

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


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

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

他有一個-d 是自訂分隔字元的,那麼就可以cut -d/

這個的意思是js中的split差不多意思

然後我再取第一個不就行了

總結起來就是 cut -d/ -f 1

就取到這個值了。



Linux下通過sh指令碼執行jar檔案


java類:

public class HelloWorld {  
    public static void main(String[] args) {  
        System.out.println("hello world !");  
    }  
}  

sh指令碼:

#!/bin/ksh  
echo "--------helloWorld------->>"  
JAVA_HOME="/usr/jdk/jdk1.6.0_34"  
JAVA_OPTIONS=" -hotspot -Xms128m -Xmx512m "  
CLASS_PATH=.;./lib;  
java -jar helloWorld.jar  

備忘:

Jar包中的MANIFEST.MF中指定運行main方法的類:
Main-Class: com.test.DeveloperSybaseTest

如果需要其他的jar包,通過下面的參數指定:
Class-Path: ./lib/jConnect2.jar
注意:Class-Path:後需要一個空格,多個jar包間需要一個空格,且一行字元不能太多,換行時需要在jar包前面加一個空格。

Jar包中的MANIFEST.MF中指定運行main方法的類:
Main-Class: com.test.DeveloperSybaseTest

如果需要其他的jar包,通過下面的參數指定:(注意:Class-Path:後需要一個空格,多個jar包間需要一個空格,且一行字元不能太多,換行時需要在jar包前面加一個空格。)
Class-Path: ./lib/jConnect2.jar


相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.