Linux中部署JAVA程序

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

JAVA是跨平台的编程语言,服务器的操作系统可以是Windows、Linux或者其它,下面将在Redhat6操作系统下,

详细说明JAVA程序在WEB服务器和应用服务器上的部署情况。

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

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

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

(3)编写日志配置文件log4j.properties

#stdout
log4j.rootLogger=INFO, logfile

#File
log4j.appender.logfile=org.apache.log4j.DailyRollingFileAppender
log4j.appender.logfile.File=../logs/log.log
log4j.appender.logfile.Append=true
log4j.appender.logfile.Threshold =INFO 
log4j.appender.logfile.DatePattern='.'yyyy-MM-dd
log4j.appender.logfile.layout=org.apache.log4j.PatternLayout
log4j.appender.logfile.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss.SSS} %5p %c{1}:%L - %m%n



(4)启动程序

在终端目录/opt/HelloWorld/bin下,输入命令:./run.sh start 

 查看日志文件logs/log.log中的内容

至此,JAVA程序HelloWorld已经在LINUX上部署完成。

 

2、JAVA WEB程序部署在TOMCAT服务器

(1)Redhat中安装JDK

详细见本人的另一篇博文

Redhat中安装JDK

(2)Redhat中安装Tomcat

详细见本人的另一篇博文

Redhat中安装tomcat

(3)JAVA Web程序打包

详细见本人的另一篇博文

ant打JAR、WAR包

(4)JAVA Web程序部署到Tomcat

1)将JAVA Web的WAR包存放到tomcat/webapps中

      如本人的目录是:/opt/apache-tomcat-6.0.37/webapps

2)关闭正在跑的tomcat

      终端输入命令,查出tomcat在跑的进程号

     [root@bogon bin]# ps -ef|grep tomcat

     杀掉tomcat进程,其中2658是tomcat的进程号

     [root@bogon bin]# kill -9 2658

3)启动tomcat

      进入目录:/opt/apache-tomcat-6.0.37/bin,然后输入启动命令

      [root@bogon bin]# ./startup.sh

      查看启动日志,进入目录:/opt/apache-tomcat-6.0.37/logs

      [root@bogon logs]# tail  -20f catalina.out

      如果有看到启动成功的日志:

      Sep 27, 2013 10:35:55 PM org.apache.catalina.startup.Catalina start
      INFO: Server startup in 1639 ms
      则说明tomcat启动成功

4)验证

     打开浏览器,输入URL:http://localhost:8080/manager/html

     如果可以看到所部署的Java Web项目,说明部署成功。

 

 

  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值