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计划任务就正常了。
修改参考:http://blog.csdn.net/haoren_e/article/details/6043645
- #!/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的更多相关文章
- IDEA部署项目,并结合Shell脚本运行Java程序
一.概述 在实际开发中,我们写好的代码,往往打成war包或jar包,通过winscp或其他软件将其上传至服务器,然而这样非常大的一个弊端就是不利于开发,为什么这么说呢?假如我们刚刚将springboo ...
- shell脚本运行springboot项目jar包
#!/bin/bash APP_NAME=AutomationGuide-0.0.1-SNAPSHOT.jar #使用说明,用来提示输入参数 usage() { echo "please e ...
- shell脚本启动java程序
#!/bin/bash ### 切换到工作目录 bin=$(cd `dirname ${0}`;pwd) cd ${bin} echo "bin [${bin}] .." ### ...
- linux的shell脚本运行python程序
可以说和windows里的bat是一样的. python3 /opt/pyweibo/get_user_info.py 104501 104502 104503
- windows批处理运行java程序
明确需求 今天你编了一个java swing版照片查看器,想让计算机上的所有照片默认打开方式都改成你的照片查看器. 使用工具软件 很多工具软件都是不把jre打包到exe中的,这就是说打包之后的exe只 ...
- 在 Sublime Text 3 中配置编译和运行 Java 程序
参考网址:http://www.open-open.com/lib/view/open1388105023765.html 1. 设置 java 的 PATH 环境变量 2. 创建批处理或 Shell ...
- sh脚本执行Java程序
1.不引用Jar包或者资源文件夹 最简单的程序Hello World. 首先创建Hello.java public class Hello { public static void main(Stri ...
- 在 Sublime Text 2 中编译和运行 Java 程序,以及输出中文出错问题解决办法
Sublime Text 2 是我最喜欢用来编码的文本编辑器,如果你尝试使用后相信你也会喜欢上它的.在这篇文章中我们将讨论如何在 Sublime Text 2 中编译和运行 Java 程序. 第一步: ...
- Java魔法堂:以Windows服务的形式运行Java程序
一.前言 由于防止维护人员误操作关闭Java控制台程序,因此决定将其改造为以Windows服务的形式运行.弄了一个上午总算搞定了,下面记录下来,以供日后查阅. 二.Java Service Wrapp ...
随机推荐
- TestLink测试管理工具的使用说明
1. 创建项目: 主页左边的列表栏有 “Test Project management”的菜单,子菜单中有 “ create new test project”,通过它可以创建新的测试项目. 同时,菜 ...
- TestLink工具使用手册介绍
工具名称:TestLink 工具介绍:TestLink遵循Apache2开源协议,免费试用.TestLink用于进行测试过程中的管理,通过使用TestLink提供的功能,可以将测试过程从测试需求.试设 ...
- Python全栈之路----常用模块学习----模块的种类和导入方法
什么是模块? 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码 ...
- java实现四则运算应用(基于控制台)
项目地址:https://gitee.com/wxrqforever/object_oriented_exp1.git 一.需求分析: 一个基于控制台的四则运算系统,要能实现生成并计算含有真,假分数, ...
- kolla单节点部署openstack
virtualbox环境: 双网卡:enp0s3(桥接) 192.168.102.194 enp0s8(桥接) 无ip 块存储 50G 关闭防火墙,selinux. 配置yum源:wget ...
- 【js字符串当做数组来使用】浪费一晚【想出了3个解决方案】
数据库的所有数据都打成字符串发到前端. 不必把它的类型也强制转成int这类的,页面负责字符串的展示 这样做可以修改页面的数据 response.setHeader("Content-type ...
- HTTPS协议加密原理解析
用 HTTP 协议,看个新闻还没有问题,但是换到更加严肃的场景中,就存在很多的安全风险.例如你要下单做一次支付,如果还是使用普通的 HTTP 协议,那你很可能会被黑客盯上. 比如,你发送一个请求,说我 ...
- asp.net core 2.0 后台定时自动执行任务
自己写一个类继承BackgroundService internal class RefreshService : BackgroundService { protected override asy ...
- unittest 出报告 并配合 jenkins,发现有用例错误,但是构建没出现红点 的解决方法
加了个 判断 测试用例总数 和 测试运行成功数 是否一致的判断,不一致 就断言失败,jenkins哪里是红点
- 软件-集成开发环境:IDEA(Java 语言开发的集成环境)
ylbtech-软件-集成开发环境:IDEA(Java 语言开发的集成环境) IDEA 全称IntelliJ IDEA,是用于java语言开发的集成环境(也可用于其他开发语言),IntelliJ在业界 ...