`
阿尔萨斯
  • 浏览: 4169221 次
社区版块
存档分类
最新评论

Java 程序的自动安装

 
阅读更多

我用过Java service wrapper,很好。不过我也能自己制作脚本完成基本功能。肯定没有Java service wrapper功能全面,不过够用了,而且完全掌控。

目标:

1.从Maven项目中产生安装包

2.将安装包安装成Ubuntu service。

我的Java程序是用来发送email的,通过读取MongoDB的email内容,发送信息。同时还依赖一个config.xml文件作为启动参数,里面配置了MongoDB的基本信息和SMTP服务器的基本信息。

现在通过执行一个脚本create_deploy.sh来制作安装包。该脚本内容如下:

#!/bin/bash

source ./tool.sh

mvn clean package -DskipTests
mvn dependency:copy-dependencies


removeFolder deploy
mkdir deploy
cp -r ./target/dependency ./deploy
cp ./target/email-1.0.jar ./deploy
cp ./config.xml ./deploy
cp ./email ./deploy
cp ./install.sh ./deploy
cp ./tool.sh ./deploy

依赖的tool.sh脚本内容:

#!/bin/bash

function removeFolder {

    if [ -d "$1" ]
    then
	echo "$2 folder exists already, remove it..."
	rm -rf $1
    else
	echo "$2 folder doesn't exists"
    fi
}

#$1 src folder
#$2 dst folder
function copyFolder {

    if [ -d "$2" ]
    then
	echo "$2 folder exists already, remove it..."
	rm -rf $2
    else
	echo "$2 folder doesn't exists, start copying..."
    fi
    cp -r $1 $2
}


#remove the folder if exists already
#$1 folder path
function createFolder {

    if [ -d "$1" ]
    then
	echo "$1 folder exists already, remove it..."
	rm -rf $1
    else
	echo "$1 folder doesn't exists, create it..."
    fi
    mkdir -p $1
}

#remove the link if exists already
#create a link($2) to file($1)
function createLink {

    if [ -L "$2" ]
    then
	echo "$2 link exists already, removing it..."
	rm $2
    else
	echo "$2 link doesn't exists, creating it..."
    fi
    echo "creating link: $2 to $1"
    ln -s $1 $2
}

#$1 source file name
#$2 source folder
#$3 destion folder
#remove the file if exists already
#create a file
function copyFile {
    if [ -f "$3/$1" ]
    then
	echo "$3/$1 exists already, removing it..."
	rm $3/$1
    else
	echo "$3/$1 doesn't exists, copying it..."
    fi
    cp $2/$1 $3
}




# $1 variable name
# $2 expected value
# put this into /etc/environment if not found
function setEnv {
    source /etc/environment
    if [ "${!1}" = "$2" ]
    then
	echo "$1 is correct: $2"
    else
	echo "$1 is wrong: ${!1} != $2"

	h=`grep "$1=\"$2\"" /etc/environment`
	if [ -n "$h" ]
	then
	    echo "/etc/environment has $1 already"
	else
	    echo "Adding $1 into /etc/environment..."
	    echo "$1=\"$2\"" >> /etc/environment
	fi
	source /etc/environment
    fi
}

#$1 means the full name of dpkg
#return 1 if dpkg is installed (found 'ii dpkg-name' in the returned string)
#otherwise return 0
function hasDpkg {
    r=`dpkg -l | grep "$1"`
    if [ -n "$r" ]
    then
	h=`dpkg -l | grep "ii  $1"`
	if [ -n "$h" ]
	then
	    return 1
	else
	    return 0
	fi
    else
	return 0
    fi
}

#$1 search string
#$2 file path
#return 1 if found
#return 0 if not found
function findStringInFile {
    h=`grep "$1" $2`
    echo "h: $h"
    if [ -n "$h" ]
    then
	return 1
    else
	return 0
    fi
}


#$1 dpkg name
function installDpkg {
    hasDpkg $1
    r=$?
    
    if [ $r -eq 1 ]
    then
	echo "$1 was installed"
    else
	echo "$1 was not installed, installing..."
	apt-get install $1
    fi
}

#$1 user name
#return 1 if exists
#return 0 if doesn't exist
function hasUser {
    h=`grep "$1" /etc/passwd`
    echo "h: $h"
    if [ -n "$h" ]
    then
	return 1
    else
	return 0
    fi
}

#$1 user group name
#return 1 if exists
#return 0 if doesn't exist
function hasUserGroup {
    h=`grep "$1" /etc/group`
    echo "h: $h"
    if [ -n "$h" ]
    then
	return 1
    else
	return 0
    fi
}

#remove user and home folder
#then create then again
function recreateSystemUserAndFolder {
    hasUser $1
    r=$?
    
    if [ $r -eq 1 ]
    then
	echo "$1 exits already,remove it..."
	userdel -r $1
    else
	echo "$1 doesn't exist,create it..."
    fi
    adduser --home /home/$1 --system --shell /bin/bash $1  
}

#remove user group 
#then create it again
function recreateUserGroup {
    hasUserGroup $1
    r=$?
    if [ $r -eq 1 ]
    then
	echo "$1 exists already, remove it..."
	delgroup $1
    else
	echo "$1 doesn't exist, create it..."
    fi
    groupadd $1
}

create_deploy脚本创建了deploy目录,通过mvn命令生成jar包和依赖包,然后将这些都复制进deploy目录,同时还有另外三个文件:

config.xml是配置文件,启动时需要

install.sh是将email-1.0.jar安装成service的脚本

email是要放在/etc/init.d/下的脚本


创建deploy成功后,进入deploy目录,运行install.sh文件,安装成功。服务启动。

看看install.sh文件内容:

#!/bin/bash

source ./tool.sh

createFolder /home/dist/email/
cp -r ./dependency /home/dist/email/
copyFile email-1.0.jar $PWD /home/dist/email/
copyFile config.xml $PWD /home/dist/email/

copyFile email $PWD /etc/init.d
chmod +x /etc/init.d/email
update-rc.d email defaults
service email start

再看看email脚本内容:

!/bin/sh

### BEGIN INIT INFO
# Provides:     email server
# Required-Start:
# Required-Stop:
# Default-Start:        2 3 4 5
# Default-Stop:         0 1 6
# Short-Description: email
# Description: email server
### END INIT INFO

. /lib/lsb/init-functions

export JAVA_HOME=/usr/jdk1.6
export PATH="$JAVA_HOME/bin:$PATH"

case "$1" in
  start)
     log_begin_msg "Starting email server"
     java -cp /home/dist/email/dependency/ -jar /home/dist/email/email-1.0.jar /home/dist/email/config.xml &
     log_end_msg 0
     ;;
  stop)
     PID=`ps -ef | grep 'email-1.0.jar' | grep -v grep | awk '{print $2}'`
     log_begin_msg "Stopping email server"
     if [ ! -z "$PID" ]; then
        kill -15 $PID
     fi
     log_end_msg 0
     ;;
  restart)
     $0 stop
     $0 start
     ;;
  *)
     log_success_msg "Usage: service email {start|stop|restart}"
     exit 1
esac

exit 0





分享到:
评论

相关推荐

    java的windows自动化-自动运行java程序

    java的windows自动化-自动运行java程序java的windows自动化-自动运行java程序

    java应用程序自动更新

    java应用程序自动更新 java应用程序自动更新 java应用程序自动更新 java应用程序自动更新 java应用程序自动更新

    java程序自动重新启动

    自己写的一小段Java程序,让程序按条件自动重新启动,3个文件都是.java文件,程序不包含包信息,可以放到C盘直接进行编译运行,其中Test是运行主程序,watch是监视检测线程

    Java写一个自动抢火车票的程序详情讲解包含代码实现.doc

    Java写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码...

    java应用程序开机自动启动

    java应用程序开机自动启动 java应用程序开机自动启动 java应用程序开机自动启动

    java 自动程序更新

    设定 检查目录 程序运行目录 备份目录。 当到检查目录检测到文件后,进行解压缩,同时备份程序运行目录的内容到备份目录,并打上时间戳。 然后把解压缩的内容覆盖到程序运行目录

    实现Java Web程序的自动登录

    实现Java Web程序的自动登录 实现Java Web程序的自动登录

    Java自动月历程序

    使用:可以在命令行里直接输入java AutoCalendar自动获取当前月份的日历。或者输入[示例]:java AutoCalendar 6 2012(这里是获取2012年6月的日历) 来获取其它时间的月历。 资源内容:两个java源文件和两个class生成...

    java常用语句大全JAVA程式-自动贩卖机SWIJava程序设计报告TCH&CASE

    java常用语句大全JAVA程式-Java程序设计报告自动贩卖机SWITCH&CASE

    java程序自动播放图片.docx

    java程序自动播放图片

    Java程序自动锁分解重构.pdf

    Java程序自动锁分解重构

    基于Github的Java程序缺陷自动修复

    内容概要:通过带着读者设计并实现了一个基于 Github 的 Java 程序缺陷修复原型系统 VulRepair。并且为了验证 VulRepair 的缺陷修复效果,还设计并实现了一组评估对比实验,从多个角度评估验证本文提出的缺陷修复...

    nsis打包 一键安装javaWEB项目,安装完后重启电脑,tomcat服务自动加载

    1、实现程序一键安装 2、卸载 3、安装时验证密码 4、应用系统快捷方式启动、注册应用系统window服务形式启动等 5、安装完毕后提示是否自动重启电脑,并需要安装完毕后重启电脑服务才能自动进行。 注意:在打包...

    Java实现自动售货机程序

    功能简述:提供3种饮料;硬币仅支持50分或100分1枚,其他硬币值不接受;投入50分硬币,选择的饮料正好有库存,提示“请取饮料”,否则提示“目前该饮料已经售完。”;若投入100分硬币,在上一种情况的基础上,还需...

    java自动安装器

    java 安装器使用C# .NET开发,兼容win10,win7的32、64位,其它的平台未测试,如果有BUG可以联系我进行修补哦。 运行程序后(以管理员运行)可以选择下载我放在服务器的程序,也可以直接使用已经下载好的jdk安装程序...

    自动生成client端java程序的eclipse插件

    自动生成client端java程序wizard

    java自动导入导出

    java程序自动导入导出程序,定时导出,可以在Liux系统下运行。

    java开发的自动取款机的程序

    java开发的自动取款机的程序,纯软的,练习java的好程序,包括函数什么的,没开发过的程序的赶紧看啊,我大学时java课留的作业在,这是标准的程序,把所有程序跟汇编后的东东都在里面了,

    JAVA办公自动化系统-程序.rar

    JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化...

    让Java程序自动重启的实现方法(推荐)

    下面小编就为大家带来一篇让Java程序自动重启的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧

Global site tag (gtag.js) - Google Analytics