Jar包一鍵重啟的Shell指令碼及新伺服器部署的一些經驗
原文首發於部落格園,作者:後青春期的Keats;地址:https://www.cnblogs.com/keatsCoder/ 轉載請註明,謝謝!
前言
最近公司為客戶重新部署了一套新環境,由我來完成了基礎環境的配置,配置過程中總結了一些經驗,分享給各位園友
-
使用 curl 命令檢查網路
拿到新伺服器後,首先檢查伺服器網路是否通暢。我們常用的 ping 命令使用的是 ICMP 協議,大部分伺服器都設定了域名出入站規則,即使某些地址可以 ping 通,也存在伺服器無法訪問的情況。這時可以使用 curl host:port 命令來測試該伺服器能否正常傳送 http 請求到外部伺服器
-
安裝 JDK
新伺服器一般沒有 JDK ,可以使用 java -version 命令檢視。如果沒有,則通過 yum 命令安裝之,如果有但版本不對也可以先解除安裝再安裝
# 解除安裝 rpm -qa | grep java | xargs rpm -e --nodeps # 安裝 1.8 yum install java-1.8.0-openjdk* -y
-
檢查伺服器時間
一般新伺服器時間都會與網路時間不一致,這時就需要我們先同步一下伺服器時間
date/timedatectl 命令可用於檢視系統當前的時間,如果和網路時間不一致
# 安裝日期工具 yum -y install ntp ntpdate # 同步時間 ntpdate cn.pool.ntp.org # 將系統時間寫入硬體時間 hwclock --systohc
-
開啟指定的埠
應用部署了之後,由於防火牆的限制,需要手動開啟應用所佔用的埠。開啟命令如下:
firewall-cmd --zone=public --add-port=80/tcp --permanent
執行完之後,重新載入防火牆配置
firewall-cmd --reload
有的伺服器在內網中,有外網域名對映,那同時需要開放該埠外網到內網的對映。這個根據服務性質來確定。如果某個微服務只是服務間內網訪問。就不建議暴露在公網中
Jar 包一鍵重啟
Java 專案在 Linux 環境中一般採用 war 包到 Tomcat 或者 jar 包部署的方式在 Linux 部署,在自動化部署大行其道的今天,仍然會有不少的公司採用手動部署的方式部署 jar 包(比如我們公司),最近我們公司為客戶重新升級了一下新的環境(新版本上線到新伺服器)由我兼任運(reng bao)維(chong qi)工程師來負責專案的部署上線。專案初上線的時候重啟操作是非常頻繁的,一般我們會採用如下的命令:
ps -ef |grep 服務名
kill -9 PID
nohup java -jar 服務名 &
tail -1000f nohup.out
這四步一氣呵成,手速快的話 10s 左右就 OK 了,然而當微服務專案很多的時候,要輸入的命令數量就是 4n ,有一次伺服器時間不準,我重設了一下伺服器時間,導致時鐘回退,雪花ID無法生成。我一口氣重啟完了所有服務,那個酸爽。。。
於是我嘗試著學習 shell 命令來寫出來一個簡單的一鍵重啟並輸出日誌的指令碼
指令碼內容
#!/bin/bash
# 作者 後青春期的Keats
# 部落格地址 https://www.cnblogs.com/keatsCoder/
# 預設應用名稱
defaultAppName='redis-cli.jar'
appName=''
if [ $1 && $1!=0 ]
then
appName=$1
else
appName=$defaultAppName
fi
echo ">>>>>>本次重啟的應用: $appName <<<<<<"
# 關閉應用方法
stopApp(){
pid=$( ps -ef |grep $appName |grep 'java -jar'|grep -v grep|awk '{print $2}')
kill -9 $pid
}
# 啟動應用方法
startApp(){
nohup java -jar $appName &
}
# 滾動列印日誌
printLog(){
tail -1000f nohup.out
}
if [ $2 ]
then
echo '第二個引數有值,僅啟動'
else
stopApp
fi
startApp
printLog
使用方法
使用 vi/vim 命令在應用 jar 包所在目錄下新建一個 restart.sh 的檔案
vi restart.sh
複製上面的程式碼,更改該檔案許可權為可執行
chmod +x restart.sh
執行指令碼,para1 para2 是可選項,para1 指定重啟的專案名稱,para2 存在時只啟動,不殺死程序
./restart.sh [para1] [para2]
增強使用方法
細心的朋友可能注意到,指令碼中有個變數 defaultAppName 沒錯,它就是預設重啟的專案名稱,對我們來說,一般 jar 包名稱不會經常修改,因此可以通過修改預設應用名稱的方式來簡化執行時所需要輸入應用名稱的步驟。
修改了預設名稱之後,如果想使用僅啟動模式,就需要使用
./restart 0 1
來實現,第一個引數 0 不會被識別成應用名稱,只是用作佔位符