shell腳本實作運行Java程式jar的方法
本篇文章主要介紹了shell腳本運行java程式jar的方法,小編覺得挺不錯的,現在分享給大家,也給大家做個參考。一起跟著小編過來看看吧
在UBuntu上部署專案的時候,我們往往透過一段shell來啟動程序,甚至是透過crontab定時任務來定時的呼叫java程序,但是很奇怪的一個問題就是,例如我寫了一個如下的shell腳本:
#!/bin/sh export mypath=/root/project/wishnomal java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
手動命令列運行該腳本的時候,可以正常運行java程序,但是使用crontab定時任務,貌似就不起效果了
分析可能原因:
1)是否目前使用者對此shell腳本沒有可執行權限,透過ls -lrt /apps/service/mtk/checking/run. sh查看腳本是有可執行,但有執行權限呀-rwxr-xr-x
2)既然單獨執行腳本沒問題,那會不會是定時的問題呢?於是寫了一個簡單的輸出的shell腳本通過定時也是沒問題的。說明還是腳本的問題。
後來上網查了一下,想到可能是腳本中環境變數的原因,因為透過crontab運行腳本,是以root用戶,而不是當前用戶,於是cat /etc/profile查看環境變量,然後修改腳本如下:
分析可能原因:
1)是否目前使用者對此shell腳本沒有可執行權限,透過ls -lrt /apps/service/mtk/checking/run.sh查看腳本是有可執行,但有執行權限呀-rwxr-xr-x
2)既然單獨執行腳本沒問題,那會不會是定時的問題呢?於是寫了一個簡單的輸出的shell腳本通過定時也是沒問題的。說明還是腳本的問題。
後來上網查了一下,想到可能是腳本中環境變數的原因,因為透過crontab運行腳本,是以root用戶,而不是當前用戶,於是cat /etc/profile查看環境變量,然後修改腳本如下:
#!/bin/sh export mypath=/root/project/wishnomal export JAVA_HOME=/root/lib/jdk1.7.0_72 PATH=$PATH:$JAVA_HOME/bin java -Xmx3000m -Xms3000m -server -d64 -Dfile.encoding=UTF-8 -Dfetch.threads=300 -classpath $mypath/:$mypath/wish2-assembly-1.0.0.jar newstandard.CrawlerNewStandard $* echo "END"
export顯示匯出為使用者環境變數的環境變數
這樣crontab計畫任務就正常了。
修改參考:
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- #指定字符集 LANG=zh_CN.GBK export LANG RUN_HOME=. CLASSPATH=$CLASSPATH:$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH 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查看環境變量,然後修改腳本如下:
#!/bin/sh # ----------------------------------------------------------------------------- # Start script for the CMGP BOSSCONTROL # # $Id: run_bosscontrol.sh,v 1.0 2007/11/06 Exp $ # ----------------------------------------------------------------------------- export PATH=/apps/usr/java/jdk1.5/bin:$PATH export JAVA_HOME=/apps/usr/java/jdk1.5 export JRE_HOME=/apps/usr/java/jdk1.5/jre export CLASSPATH=/apps/usr/java/jdk1.5/lib:/apps/usr/java/jdk1.5/jre/lib:$CLASSPATH RUN_HOME=/apps/service/checking CLASSPATH=$CLASSPATH$RUN_HOME/lib/checking.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/ojdbc14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/commons-dbutils-1.1.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/log4j-1.2.14.jar CLASSPATH=$CLASSPATH:$RUN_HOME/lib/dom4j-1.6.jar export CLASSPATH=$CLASSPATH java com.**.checking.Checking_Start >> log.out &
export顯示導出為使用者環境變數的環境變數
以上這種jar套件是透過eclipse工具export匯出,不包含MANIFEST.MF文件,如果使用打包工具Ant,我們可以在打包預設的build.xml檔案中設定Class-Path
將第三方jar套件加入manifest.mf檔案中,且指定程式主類別
在build.xml中加入以下內容:
<!-- create a property containing all .jar files, prefix lib/, and seperated with a space --> <pathconvert property="libs.project" pathsep=" "> <mapper> <chainedmapper> <!-- remove absolute path --> <flattenmapper /> <!-- add lib/ prefix --> <globmapper from="*" to="lib/*" /> </chainedmapper> </mapper> <path> <!-- lib.home contains all jar files, in several subdirectories --> <fileset dir="${lib.dir}"> <include name="**/*.jar" /> </fileset> </path> </pathconvert>
另外,在create manifest檔時,加上:
<!-- 这样就可以将第三方jar包加入 --> <attribute name="Class-Path" value="${libs.project}" /> <!-- 程序运行的主类 --> <attribute name="Main-Class" value="com.**.checking.Checking_Start " />
這樣運行ant,打成的jar套件中MANIFEST.MF中內容如下:
Manifest-Version: 1.0 Ant-Version: Apache Ant 1.7.0 Created-By: 1.5.0_09-b01 (Sun Microsystems Inc.) Implementation-Title: fee task Implementation-Version: 1.0 Implementation-Vendor: Aspire Main-Class: com.aspire.cmgp.flowcontrol.server.FlowControlServer Class-Path: lib/cmgp-util-1.0.1.jar lib/commons-codec-1.3.jar lib/comm ons-collections.jar lib/commons-dbcp-1.2.1.jar lib/commons-httpclient .jar lib/commons-logging.jar lib/commons-pool-1.2.jar lib/dom4j.jar l ib/log4j.jar lib/ojdbc14.jar
這樣在shell腳本中就不需要指定程式所需的jar包了,也就不存在環境變數設定的惱人問題。比較正規的也是這麼操作的。
這樣在shell中就直接執行jar套件就行了:java -jar 主程式.jar -Xmx1024m -Xms1024m -Xmn512m,
#!/bin/bash後追加
source /etc/profile
source ~/.bash_profile
測試下。 。
#! /bin/sh export JAVA_HOME=/usr/java/jdk1.6.0_18 export CLASSPATH=.:${JAVA_HOME}/lib/dt.jar:${JAVA_HOME}/lib/tools.jar for i in lib/*.jar; do CLASSPATH=$i:${CLASSPATH} done export CLASSPATH=.:${CLASSPATH}
java -cp ${CLASSPATH} main方法所在套件名稱.main方法所在的類別名稱
以上是shell腳本實作運行Java程式jar的方法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

Java 8引入了Stream API,提供了一種強大且表達力豐富的處理數據集合的方式。然而,使用Stream時,一個常見問題是:如何從forEach操作中中斷或返回? 傳統循環允許提前中斷或返回,但Stream的forEach方法並不直接支持這種方式。本文將解釋原因,並探討在Stream處理系統中實現提前終止的替代方法。 延伸閱讀: Java Stream API改進 理解Stream forEach forEach方法是一個終端操作,它對Stream中的每個元素執行一個操作。它的設計意圖是處

膠囊是一種三維幾何圖形,由一個圓柱體和兩端各一個半球體組成。膠囊的體積可以通過將圓柱體的體積和兩端半球體的體積相加來計算。本教程將討論如何使用不同的方法在Java中計算給定膠囊的體積。 膠囊體積公式 膠囊體積的公式如下: 膠囊體積 = 圓柱體體積 兩個半球體體積 其中, r: 半球體的半徑。 h: 圓柱體的高度(不包括半球體)。 例子 1 輸入 半徑 = 5 單位 高度 = 10 單位 輸出 體積 = 1570.8 立方單位 解釋 使用公式計算體積: 體積 = π × r2 × h (4

Spring Boot簡化了可靠,可擴展和生產就緒的Java應用的創建,從而徹底改變了Java開發。 它的“慣例慣例”方法(春季生態系統固有的慣例),最小化手動設置
