我用过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应用程序自动更新 java应用程序自动更新 java应用程序自动更新 java应用程序自动更新 java应用程序自动更新
自己写的一小段Java程序,让程序按条件自动重新启动,3个文件都是.java文件,程序不包含包信息,可以放到C盘直接进行编译运行,其中Test是运行主程序,watch是监视检测线程
Java写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码实现.docJava写一个自动抢火车票的程序详情讲解包含代码...
java应用程序开机自动启动 java应用程序开机自动启动 java应用程序开机自动启动
设定 检查目录 程序运行目录 备份目录。 当到检查目录检测到文件后,进行解压缩,同时备份程序运行目录的内容到备份目录,并打上时间戳。 然后把解压缩的内容覆盖到程序运行目录
实现Java Web程序的自动登录 实现Java Web程序的自动登录
使用:可以在命令行里直接输入java AutoCalendar自动获取当前月份的日历。或者输入[示例]:java AutoCalendar 6 2012(这里是获取2012年6月的日历) 来获取其它时间的月历。 资源内容:两个java源文件和两个class生成...
java常用语句大全JAVA程式-Java程序设计报告自动贩卖机SWITCH&CASE
java程序自动播放图片
Java程序自动锁分解重构
内容概要:通过带着读者设计并实现了一个基于 Github 的 Java 程序缺陷修复原型系统 VulRepair。并且为了验证 VulRepair 的缺陷修复效果,还设计并实现了一组评估对比实验,从多个角度评估验证本文提出的缺陷修复...
1、实现程序一键安装 2、卸载 3、安装时验证密码 4、应用系统快捷方式启动、注册应用系统window服务形式启动等 5、安装完毕后提示是否自动重启电脑,并需要安装完毕后重启电脑服务才能自动进行。 注意:在打包...
功能简述:提供3种饮料;硬币仅支持50分或100分1枚,其他硬币值不接受;投入50分硬币,选择的饮料正好有库存,提示“请取饮料”,否则提示“目前该饮料已经售完。”;若投入100分硬币,在上一种情况的基础上,还需...
java 安装器使用C# .NET开发,兼容win10,win7的32、64位,其它的平台未测试,如果有BUG可以联系我进行修补哦。 运行程序后(以管理员运行)可以选择下载我放在服务器的程序,也可以直接使用已经下载好的jdk安装程序...
自动生成client端java程序wizard
java程序自动导入导出程序,定时导出,可以在Liux系统下运行。
java开发的自动取款机的程序,纯软的,练习java的好程序,包括函数什么的,没开发过的程序的赶紧看啊,我大学时java课留的作业在,这是标准的程序,把所有程序跟汇编后的东东都在里面了,
JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化系统_程序JAVA办公自动化...
下面小编就为大家带来一篇让Java程序自动重启的实现方法(推荐)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧