您的位置:首页 > 运维架构 > Linux

linux下运行javaSE项目-依赖外部jar文件

2014-07-31 22:13 417 查看
之前工作中只在linux 中运行过java web项目,没有在linux中部署过javaSE项目,前几天工作中遇到了这样的场景,参考了一下nutch、hadoop的启动脚本写了下面的一个启动脚本,shell脚本编程不是很熟悉如果有高手帮忙优化一下不胜感激。

启动脚本需要使用 ./start.sh start
ps:以下标红的需要按照自己实际情况修改

启动脚本需要使用 ./start.sh start
#!/bin/bash
#JDK所在路径
JAVA_HOME="/home/hadoop/software/jdk1.7.0_51"
#Java程序所在的目录(classes的上一级目录)
APP_HOME=/home/hadoop/myapp
#需要启动的Java主程序(main方法类) (需要执行的代码需要达成jar包放到和其他lib同目录下)需要制定全类名
APP_MAINCLASS="com.crazywolf.myappmainclass"
#拼凑完整的classpath参数,包括指定lib目录下所有的jar(需要把当前服务打成jar 和所有的依赖的第三方jar放在和此脚本同级目录的lib目录中)
#目录结构如下
#   ----start.sh   当前shell脚本
#   ----lib           存放所有jar
#   ---------  *.jar
CLASSPATH="."
for i in ./lib/*.jar; do
CLASSPATH="$CLASSPATH":"$i"
done
echo $CLASSPATH
#下面参数应该写 需要执行当前服务的用户名
RUNNING_USER=hadoop
#java虚拟机启动参数(可以自己按照实际情况设置,我的app只是启动三个线程请求一个webservice服务获取数据然后保存而已,所以128M内存足够了)
JAVA_OPTS="-ms256m -mx256m -Xmn128m -Djava.awt.headless=true -XX:MaxPermSize=128m"
psid=0
#此方法用于判断当前服务是否已经启动 使用java 的 jps 查看当前系统中是否有当前服务的线程号(比如启动了myappmainclass服务 使用jps 命令就可以看到myappmainclass服务的进程号)
checkpid() {
javaps=`$JAVA_HOME/bin/jps -l | grep $APP_MAINCLASS`
if [ -n "$javaps" ]; then
psid=`echo $javaps | awk '{print $1}'`
else
psid=0
fi
}
start() {
checkpid
if [ $psid -ne 0 ]; then
echo "================================"
echo "warn: $APP_MAINCLASS already started! (pid=$psid)"
echo "================================"
else
echo -n "Starting $APP_MAINCLASS ..."
# JAVA_CMD="nohup java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >/dev/null 2>&1 &"
nohup java $JAVA_OPTS -classpath $CLASSPATH $APP_MAINCLASS >../nohup.out 2>&1 &
# su - $RUNNING_USER -c "$JAVA_CMD"
checkpid
if [ $psid -ne 0 ]; then
echo "(pid=$psid) [OK]"
else
echo "[Failed]"
fi
fi
}
stop() {
checkpid
if [ $psid -ne 0 ]; then
echo -n "Stopping $APP_MAINCLASS ...(pid=$psid) "
kill -9 $psid
# su - $RUNNING_USER -c "kill -9 $psid"
if [ $? -eq 0 ]; then
echo "[OK]"
else
echo "[Failed]"
fi
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: