一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務器之家:專注于服務器技術(shù)及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - shell腳本運行java程序jar的方法

shell腳本運行java程序jar的方法

2021-01-21 13:49闞壠 Java教程

本篇文章主要介紹了shell腳本運行java程序jar的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧

在UBuntu上部署項目的時候,我們往往通過一段shell來啟動程序,甚至是通過crontab定時任務來定時的調(diào)用java程序,但是很奇怪的一個問題就是,比如我寫了一個如下的shell腳本:

?
1
2
3
4
5
6
#!/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腳本沒有可執(zhí)行權(quán)限,通過ls -lrt /apps/service/mtk/checking/run.sh查看腳本是有可執(zhí)行,但是有執(zhí)行權(quán)限呀-rwxr-xr-x

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

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

分析可能原因:

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

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

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

?
1
2
3
4
5
6
7
8
#!/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顯示導出為用戶環(huán)境變量的環(huán)境變量

這樣crontab計劃任務就正常了。 

修改參考:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#!/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腳本沒有可執(zhí)行權(quán)限,通過ls -lrt /apps/service/mtk/checking/run.sh查看腳本是有可執(zhí)行,但是有執(zhí)行權(quán)限呀-rwxr-xr-x

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

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

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/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顯示導出為用戶環(huán)境變量的環(huán)境變量

以上這種jar包是通過eclipse工具export導出,不包含MANIFEST.MF文件,如果使用打包工具Ant,我們可以在打包默認的build.xml文件中設置Class-Path

將第三方jar包加入manifest.mf文件中,且指定程序主類

在build.xml中添加如下內(nèi)容:

?
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<!-- 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文件時,加上:

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

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

?
1
2
3
4
5
6
7
8
9
10
11
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包了,也就不存在環(huán)境變量設置的惱人問題。比較正規(guī)的也是這么操作的。

這樣在shell中就直接運行jar包就行了:java -jar 主程序.jar -Xmx1024m -Xms1024m -Xmn512m,

#!/bin/bash后追加

source /etc/profile
source ~/.bash_profile

測試下。。

?
1
2
3
4
5
6
7
#! /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方法所在的類名

以上就是本文的全部內(nèi)容,希望對大家的學習有所幫助,也希望大家多多支持服務器之家。

原文鏈接:http://www.cnblogs.com/hanlong/p/5761595.html

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 深夜福利影院在线观看 | 国产一区私人高清影院 | 久久精品中文闷骚内射 | 亚洲精品一区二区三区在线看 | 成人在线视频在线观看 | 免费观看在线观看 | 亚洲福利电影一区二区? | 美女班主任让我爽了一夜视频 | 亚洲AV无码A片在线观看蜜桃 | 国产在线视频福利 | 亚洲精品一线二线三线 | 国产精品成人网红女主播 | 午夜爱| 日韩在线视频一区二区三区 | 我不卡影院手机在线观看 | 麻豆小视频在线观看 | 国产一卡2卡3卡4卡公司科普 | 欧美国产日本高清不卡 | 国产精品国产精品国产三级普 | 亚洲欧洲日产国码天堂 | meyd–456佐山爱在线播放 | www免费视频com| 成人网18免费网站 | 瘦老汉gay| 袖珍人与大黑人性视频 | 91看片淫黄大片.在线天堂 | 热99re国产久热在线 | 性欧美高清理论片 | 2020精品极品国产色在线观看 | 欧洲第一区第二区第三区 | 女教师巨大乳孔中文字幕免费 | 好大用力深一点 | 国产小视频在线播放 | 黑人破中国女人处 | 亚洲成人免费看 | 日韩欧美不卡视频 | 国产亚洲精品自在线亚洲情侣 | 国产高清一区二区 | 1313午夜精品理伦片 | 我的奶头被客人吸的又肿又红 | 色综合久久天天综合观看 |