Java 程式的自動安裝

來源:互聯網
上載者:User

我用過Java service wrapper,很好。不過我也能自己製作指令碼完成準系統。肯定沒有Java service wrapper功能全面,不過夠用了,而且完全掌控。

目標:

1.從Maven項目中產生安裝包

2.將安裝包安裝成Ubuntu service。

我的Java程式是用來發送email的,通過讀取MongoDB的email內容,發送資訊。同時還依賴一個config.xml檔案作為啟動參數,裡面配置了MongoDB的基本資料和SMTP伺服器的基本資料。

現在通過執行一個指令碼create_deploy.sh來製作安裝包。該指令碼內容如下:

#!/bin/bashsource ./tool.shmvn clean package -DskipTestsmvn dependency:copy-dependenciesremoveFolder deploymkdir deploycp -r ./target/dependency ./deploycp ./target/email-1.0.jar ./deploycp ./config.xml ./deploycp ./email ./deploycp ./install.sh ./deploycp ./tool.sh ./deploy

依賴的tool.sh指令碼內容:

#!/bin/bashfunction removeFolder {    if [ -d "$1" ]    thenecho "$2 folder exists already, remove it..."rm -rf $1    elseecho "$2 folder doesn't exists"    fi}#$1 src folder#$2 dst folderfunction copyFolder {    if [ -d "$2" ]    thenecho "$2 folder exists already, remove it..."rm -rf $2    elseecho "$2 folder doesn't exists, start copying..."    fi    cp -r $1 $2}#remove the folder if exists already#$1 folder pathfunction createFolder {    if [ -d "$1" ]    thenecho "$1 folder exists already, remove it..."rm -rf $1    elseecho "$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" ]    thenecho "$2 link exists already, removing it..."rm $2    elseecho "$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 filefunction copyFile {    if [ -f "$3/$1" ]    thenecho "$3/$1 exists already, removing it..."rm $3/$1    elseecho "$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 foundfunction setEnv {    source /etc/environment    if [ "${!1}" = "$2" ]    thenecho "$1 is correct: $2"    elseecho "$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/environmentfisource /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 0function hasDpkg {    r=`dpkg -l | grep "$1"`    if [ -n "$r" ]    thenh=`dpkg -l | grep "ii  $1"`if [ -n "$h" ]then    return 1else    return 0fi    elsereturn 0    fi}#$1 search string#$2 file path#return 1 if found#return 0 if not foundfunction findStringInFile {    h=`grep "$1" $2`    echo "h: $h"    if [ -n "$h" ]    thenreturn 1    elsereturn 0    fi}#$1 dpkg namefunction installDpkg {    hasDpkg $1    r=$?        if [ $r -eq 1 ]    thenecho "$1 was installed"    elseecho "$1 was not installed, installing..."apt-get install $1    fi}#$1 user name#return 1 if exists#return 0 if doesn't existfunction hasUser {    h=`grep "$1" /etc/passwd`    echo "h: $h"    if [ -n "$h" ]    thenreturn 1    elsereturn 0    fi}#$1 user group name#return 1 if exists#return 0 if doesn't existfunction hasUserGroup {    h=`grep "$1" /etc/group`    echo "h: $h"    if [ -n "$h" ]    thenreturn 1    elsereturn 0    fi}#remove user and home folder#then create then againfunction recreateSystemUserAndFolder {    hasUser $1    r=$?        if [ $r -eq 1 ]    thenecho "$1 exits already,remove it..."userdel -r $1    elseecho "$1 doesn't exist,create it..."    fi    adduser --home /home/$1 --system --shell /bin/bash $1  }#remove user group #then create it againfunction recreateUserGroup {    hasUserGroup $1    r=$?    if [ $r -eq 1 ]    thenecho "$1 exists already, remove it..."delgroup $1    elseecho "$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/bashsource ./tool.shcreateFolder /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.dchmod +x /etc/init.d/emailupdate-rc.d email defaultsservice 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-functionsexport JAVA_HOME=/usr/jdk1.6export 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 1esacexit 0

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.