linux部署java程序_Linux中部署JAVA程序

Java程序在开发完成后,需要部署到服务器,如果是WEB项目,需要部署到WEB服务器,否则部署到应用服务器。

JAVA是跨平台的编程语言,服务器的操作系统可以是Windows、Linux或者其它,下面将在RedHat6操作系统下,详细说明JAVA程序在WEB服务器和应用服务器上的部署情况。

1、JAVA程序部署在应用服务器

(1) JAVA程序HelloWorld 在Redhat6上部署的目录结构

1b67626427f1b88d19b164afe09a6ddf.png

bin : 存放shell脚本run.sh

conf :存放配置文件log4j.properties

lib :存放JAR包HelloWorld.jar、log4j-1.2.16.jar

logs:存放程序运行日志文件log.log

(2)编写测试类HelloWorld.java 并打成JAR包HelloWorld.jar

package com.test;

import org.apache.log4j.Logger;

import org.apache.log4j.PropertyConfigurator;

public class HelloWorld {

private static Logger log = Logger.getLogger(HelloWorld.class);

public static void main(String[] args) {

try{

//log4j.properties变量的值在脚本bin/run.sh 中读取

String config = System.getProperty("log4j.properties");

if (config != null) {

PropertyConfigurator.configure(config);

}

log.info("HelloWorld");

Thread thread = new Thread(){

public void run(){

while(true){

try {

Thread.sleep(5*1000);

log.info("每隔5秒打印一下日志");

} catch (InterruptedException e) {

e.printStackTrace();

log.error(e.getMessage());

}

}

}

};

thread.run();

} catch (Exception e) {

log.error("[X]启动失败:"+e.getMessage());

System.exit(1);

}

}

}

(2)编写shell启动脚本run.sh

#! /bin/sh

#-------------------------------------------------------------------

# 定义变量

#-------------------------------------------------------------------

APP_NAME=HelloWorld

GREP_KEY="Diname="${APP_NAME}

# -Xms512m 设置JVM堆的初始内存

# -Xmx1024m 设置JVM堆的最大内存

# -Dlog4j.properties 设置log4j日志文件参数,可给JAVA程序调用,调用格式是System.getProperty("log4j.properties")

APP_OPTS="-Xrs -Xms512m -Xmx1024m -Dlog4j.properties=../conf/log4j.properties"

# 程序主类

APP_CLASS="com.test.HelloWorld"

# 日志文件

APP_LOG="../logs/log.log"

# 模块运行需要的lib

APP_LIBS=./:`ls ../lib/*.jar | paste -s -d":" -`

# 当前的类路径=当前模块的类路径+JDK的类路径

APP_CLASSPATH=${APP_LIBS}:.:${CLASSPATH}

# 检查HelloWorld进程是否已经在运行,如果在运行则返回1,否则返回0

is_exist(){

# ps -ef : 查询所有进程

# grep -w "${GREP_KEY}" : 从所有进程中查出名称为HelloWorld的进程,-w为精确查找

# grep -v "grep" : 排除名称为grep的进程

# awk '{print $2}' : 输出第二个参数,也就是进程号

pid=`ps -ef | grep -w "${GREP_KEY}" | grep -v "grep" | awk '{print $2}'`

# 判断进程号是否为空

if [ -z "${pid}" ]

then return 1

else

return 0

fi

}

# 打印HelloWorld进程的状态信息

status(){

is_exist

if [ $? -eq "0" ]

then echo "${APP_NAME} is running. pid=${pid} ."

else

echo "${APP_NAME} is not running"

fi

}

# 启动HelloWorld进程

start(){

is_exist

if [ $? -eq "0" ]

then echo "${APP_NAME} is already running. pid=${pid} ."

return 0

else

echo "try to start ${APP_NAME} ... "

# 调用nohup命令启动HelloWorld

# 1>&- : 表示关闭标准输出日志到nohup.out

# 2>${APP_LOG} : 表示输出日志到../logs/log.log

# 最后的& : 表示退出帐户/关闭终端时程序不退出

nohup $JAVA_HOME/bin/java -${GREP_KEY} ${APP_OPTS} -classpath ${APP_CLASSPATH} ${APP_CLASS} 1>&- 2>${APP_LOG} &

# 程序的启动需要一定的时间,这里设置暂停时间(3秒),单位是秒

sleep 3

is_exist

if [ $? -eq "0" ]

then

echo "${APP_NAME} is running now. pid=${pid}."

return 0

else

echo "failed to start ${APP_NAME}! see ${APP_LOG} for more details."

return 1

fi

fi

}

# 停止HelloWorld进程

stop()

{

is_exist

if [ $? -eq 0 ]

then  echo "try to stop ${APP_NAME} ..."

# 调用kill命令杀掉进程

/usr/bin/kill -9  ${pid}

if [ $? -ne 0 ]

then echo "failed to stop ${APP_NAME}!"

return 1

else

echo "${APP_NAME} stopped."

return 0

fi

else

echo "${APP_NAME} is not running!"

return 1

fi

}

# 重启HelloWorld进程

restart(){

stop

start

}

# 显示帮助信息

help()

{

echo "status                    show the status of ${APP_NAME} server."

echo "start                    start the ${APP_NAME} server."

echo "stop                      stop the ${APP_NAME} server."

echo "restart                  restart the ${APP_NAME} server."

}

# 主函数

main()

{

case "$1" in

status)  status;;

start)    start;;

stop)    stop;;

restart)  restart;;

*)        echo "command param error ! see follow help "; help;;

esac

}

# 执行主函数 $1表示选择第一个字符串为参数,比如终端命令是:./run.sh start status,则选择start为输入参数

main $1

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值