<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    ZT文萃

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

    shell腳本運行java程序

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


         在linux上部署項目的時候,我們往往通過一段shell來啟動程序,甚至是通過crontab定時任務來定時的調用java程序,但是很奇怪的一個問題就是,比如我寫了一個如下的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 &   
     

     

    手動命令行運行該腳本的時候,可以正常運行java程序,但是使用crontab定時任務,貌似就不起效果了,很是郁悶哪,查原因哪,分析可能原因:

     1)是否當前用戶對此shell腳本沒有可執行權限,通過ls -lrt /apps/service/mtk/checking/run.sh查看腳本是有可執行,但是有執行權限呀-rwxr-xr-x

     2)既然單獨運行腳本沒問題,那會不會是定時的問題呢?于是寫了一個簡單的輸出的shell腳本通過定時也是沒問題的。說明還是腳本的問題。

    后來上網查了下,想到可能是腳本中環境變量的原因,因為通過crontab運行腳本,是以root用戶,而不是當前用戶,于是cat /etc/profile查看環境變量,然后修改腳本如下:

    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顯示導出為用戶環境變量的環境變量
    以上這種jar包是通過eclipse工具export導出,不包含MANIFEST.MF文件,如果使用打包工具Ant,我們可以在打包默認的build.xml文件中設置Class-Path
    將第三方jar包加入manifest.mf文件中,且指定程序主類
    在build.xml中添加如下內容:

     

    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文件時,加上:

    1. <!-- 這樣就可以將第三方jar包加入 -->   
    2. <attribute name="Class-Path" value="${libs.project}" />  
    3. <!-- 程序運行的主類 -->  
    4. <attribute name="Main-Class" value="com.**.checking.Checking_Start " />  

     

    這樣運行ant,打成的jar包中MANIFEST.MF中內容如下:

    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包了,也就不存在環境變量設置的惱人問題。比較正規的也是這么操作的。
    這樣在shell中就直接運行jar包就行了:java -jar 主程序.jar -Xmx1024m -Xms1024m -Xmn512m,多好多方便~


    只有注冊用戶登錄后才能發表評論。


    網站導航:
     
    主站蜘蛛池模板: 精品一区二区三区免费| 乱淫片免费影院观看| 日本黄色动图免费在线观看| 免费观看亚洲人成网站| 婷婷亚洲综合五月天小说在线| 成年人免费网站在线观看| 亚洲色精品VR一区区三区| 中文字幕人成无码免费视频| 亚洲国产亚洲综合在线尤物| 欧洲乱码伦视频免费| 亚洲国产人成在线观看| 四虎成人免费影院网址| 久久精品国产亚洲av瑜伽| 免费观看亚洲人成网站| 9久久免费国产精品特黄| 日本亚洲视频在线 | yy一级毛片免费视频| 中文字幕精品亚洲无线码二区| 久久www免费人成看国产片| 久久精品国产99精品国产亚洲性色| 国内少妇偷人精品视频免费| 久久亚洲国产精品成人AV秋霞 | 亚洲理论在线观看| 99在线视频免费观看视频| 亚洲av无码一区二区三区天堂| 国产无遮挡又黄又爽免费视频| 日韩在线一区二区三区免费视频| 亚洲一区二区三区香蕉| 91青青青国产在观免费影视| 亚洲精品天堂在线观看| 亚洲精品国产V片在线观看| 在线观看免费视频一区| 亚洲日产2021三区| 国产一区视频在线免费观看| 青青操免费在线视频| 亚洲最大成人网色香蕉| 婷婷综合缴情亚洲狠狠尤物| 一级毛片aaaaaa免费看| 亚洲国产成人精品无码区二本 | 亚洲欧洲一区二区| 国产自产拍精品视频免费看|