ZT文萃

          本博不原創(chuàng),轉(zhuǎn)帖自己感興趣那些事人物,什么入眼貼什么,隨心所欲。
          posts - 93, comments - 5, trackbacks - 0, articles - 0
            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理

          shell腳本運(yùn)行java程序

          Posted on 2014-02-20 11:25 ZT文萃 閱讀(646) 評(píng)論(0)  編輯  收藏
          轉(zhuǎn)載自:
          http://blog.csdn.net/haoren_e/article/details/6043645


               在linux上部署項(xiàng)目的時(shí)候,我們往往通過(guò)一段shell來(lái)啟動(dòng)程序,甚至是通過(guò)crontab定時(shí)任務(wù)來(lái)定時(shí)的調(diào)用java程序,但是很奇怪的一個(gè)問(wèn)題就是,比如我寫(xiě)了一個(gè)如下的shell腳本:

           

          1. #!/bin/sh  
          2. # -----------------------------------------------------------------------------  
          3. # Start script for the CMGP BOSSCONTROL   
          4. #  
          5. # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $  
          6. # -----------------------------------------------------------------------------  
          7. #指定字符集  
          8. LANG=zh_CN.GBK export LANG  
          9. RUN_HOME=.  
          10. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/checking.jar  
          11. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar  
          12. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar  
          13. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar  
          14. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar  
          15.   
          16. export CLASSPATH  
          17.   
          18. java  com.**.checking.Checking_Start >> log.out &   
           

           

          手動(dòng)命令行運(yùn)行該腳本的時(shí)候,可以正常運(yùn)行java程序,但是使用crontab定時(shí)任務(wù),貌似就不起效果了,很是郁悶?zāi)模樵蚰模治隹赡茉颍?/span>

           1)是否當(dāng)前用戶(hù)對(duì)此shell腳本沒(méi)有可執(zhí)行權(quán)限,通過(guò)ls -lrt /apps/service/mtk/checking/run.sh查看腳本是有可執(zhí)行,但是有執(zhí)行權(quán)限呀-rwxr-xr-x

           2)既然單獨(dú)運(yùn)行腳本沒(méi)問(wèn)題,那會(huì)不會(huì)是定時(shí)的問(wèn)題呢?于是寫(xiě)了一個(gè)簡(jiǎn)單的輸出的shell腳本通過(guò)定時(shí)也是沒(méi)問(wèn)題的。說(shuō)明還是腳本的問(wèn)題。

          后來(lái)上網(wǎng)查了下,想到可能是腳本中環(huán)境變量的原因,因?yàn)橥ㄟ^(guò)crontab運(yùn)行腳本,是以root用戶(hù),而不是當(dāng)前用戶(hù),于是cat /etc/profile查看環(huán)境變量,然后修改腳本如下:

          1. #!/bin/sh  
          2. # -----------------------------------------------------------------------------  
          3. # Start script for the CMGP BOSSCONTROL   
          4. #  
          5. # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $  
          6. # -----------------------------------------------------------------------------  
          7. export PATH=/apps/usr/java/jdk1.5/bin:$PATH  
          8. export JAVA_HOME=/apps/usr/java/jdk1.5  
          9. export JRE_HOME=/apps/usr/java/jdk1.5/jre  
          10. export CLASSPATH=/apps/usr/java/jdk1.5/lib:/apps/usr/java/jdk1.5/jre/lib:$CLASSPATH  
          11. RUN_HOME=/apps/service/checking  
          12. CLASSPATH=$CLASSPATH$RUN_HOME/lib/checking.jar  
          13. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar  
          14. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar  
          15. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar  
          16.  CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar  
          17.   
          18. export CLASSPATH=$CLASSPATH  
          19.   
          20. java  com.**.checking.Checking_Start >> log.out &   

           

          export顯示導(dǎo)出為用戶(hù)環(huán)境變量的環(huán)境變量
          以上這種jar包是通過(guò)eclipse工具export導(dǎo)出,不包含MANIFEST.MF文件,如果使用打包工具Ant,我們可以在打包默認(rèn)的build.xml文件中設(shè)置Class-Path
          將第三方j(luò)ar包加入manifest.mf文件中,且指定程序主類(lèi)
          在build.xml中添加如下內(nèi)容:

           

          1. <!-- create a property containing all .jar files, prefix lib/, and seperated with a space -->  
          2. <pathconvert property="libs.project" pathsep=" ">  
          3.    <mapper>  
          4.       <chainedmapper>  
          5.         <!-- remove absolute path -->  
          6.         <flattenmapper />  
          7.        <!-- add lib/ prefix -->  
          8.        <globmapper from="*" to="lib/*" />  
          9.       </chainedmapper>  
          10.     </mapper>  
          11.      <path>  
          12.       <!-- lib.home contains all jar files, in several subdirectories -->  
          13.       <fileset dir="${lib.dir}">  
          14.        <include name="**/*.jar" />  
          15.       </fileset>  
          16.      </path>  
          17.   </pathconvert>  

           

          另外,在create manifest文件時(shí),加上:

          1. <!-- 這樣就可以將第三方j(luò)ar包加入 -->   
          2. <attribute name="Class-Path" value="${libs.project}" />  
          3. <!-- 程序運(yùn)行的主類(lèi) -->  
          4. <attribute name="Main-Class" value="com.**.checking.Checking_Start " />  

           

          這樣運(yùn)行ant,打成的jar包中MANIFEST.MF中內(nèi)容如下:

          1. Manifest-Version: 1.0  
          2. Ant-Version: Apache Ant 1.7.0  
          3. Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.)  
          4. Implementation-Title: fee task  
          5. Implementation-Version: 1.0  
          6. Implementation-Vendor: Aspire  
          7. Main-Class: com.aspire.cmgp.flowcontrol.server.FlowControlServer  
          8. Class-Path: lib/cmgp-util-1.0.1.jar lib/commons-codec-1.3.jar lib/comm  
          9.  ons-collections.jar lib/commons-dbcp-1.2.1.jar lib/commons-httpclient  
          10.  .jar lib/commons-logging.jar lib/commons-pool-1.2.jar lib/dom4j.jar l  
          11.  ib/log4j.jar lib/ojdbc14.jar  

           

          這樣在shell腳本中就不需要指定程序所需要的jar包了,也就不存在環(huán)境變量設(shè)置的惱人問(wèn)題。比較正規(guī)的也是這么操作的。
          這樣在shell中就直接運(yùn)行jar包就行了:java -jar 主程序.jar -Xmx1024m -Xms1024m -Xmn512m,多好多方便~


          只有注冊(cè)用戶(hù)登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 定远县| 嘉定区| 安义县| 错那县| 南雄市| 抚松县| 隆安县| 长治县| 溧水县| 三明市| 含山县| 莒南县| 大关县| 哈密市| 齐齐哈尔市| 罗定市| 清镇市| 黄石市| 安达市| 崇仁县| 义乌市| 沈阳市| 霸州市| 巢湖市| 乌鲁木齐市| 板桥市| 永兴县| 禹城市| 米脂县| 呼和浩特市| 武平县| 城口县| 瑞金市| 遂宁市| 新建县| 莱州市| 博兴县| 平度市| 桂阳县| 武穴市| 洛宁县|