#!/bin/bash
remote_user="***"
登錄服務器的用戶名
remote_ip="10.*** "
登錄服務器
jar_file="1.jar"
要打的jar包
local_path="1/target"
jar包的位置
remote_path="/home/java "
jar包打下來放的位置
release_path="$remote_path"
backup_path="$remote_path/backup"
JAVA_PATH="/usr/java/jdk-11.0.2/bin"
Java環境
APP_PARAM="--spring.profiles.active=uat"
Jar包啟動命令
ssh $remote_user@$remote_ip "ps -ef | grep $jar_file | grep -v grep | cut -c 9-15 | xargs kill -9"
ssh $remote_user@$remote_ip:遠程登錄linux環境
ps -ef | grep $jar_file:輸入命令,查找某個jar包是否啟動
grep -v grep:過濾掉自己執行的grep ,grep -v 是反向查找的意思,比如 grep -v grep 就是查找不含有 grep 字段的行
-c
: 提取指定的字符,可以是以逗號分隔的數字的列表,也可以是以連字符分隔的數字的范圍。
cut -c 9-15:是截取上面輸出的結果中的進程號,9-15正好是進程號
xargs kill -9:xargs命令可以通過管道接受字符串,並將接收到的字符串通過空格分割成許多參數(默認情況下是通過空格分割) 然后將參數傳遞給其后面的命令,作為后面命令的命令行參數
if [ $? -eq 0 ]; then
if [ $? -eq 0 ] 語句作用:判斷命令是否執行成功
ssh $remote_user@$remote_ip "mv $release_path/$jar_file $backup_path/$jar_file.`date +%Y-%m-%d-%k-%M`"
如果命令執行成功,復制jar包到backup_path
fi
if [ $? -eq 0 ]; then
scp $local_path/$jar_file $remote_user@$remote_ip:$release_path/
fi
scp: 是 linux 系統下基於 ssh 登陸進行安全的遠程文件拷貝命令。,jar從target上拷貝到服務器的release_path
if [ $? -eq 0 ]; then
ssh $remote_user@$remote_ip "cd $release_path ; $JAVA_PATH/java -jar $jar_file $APP_PARAM > $remote_path/letter_job.log 2>&1 &"
fi
切換到release_path,啟動jar包
java -jar 1.jar --spring.profiles.active=uat &>job.log 2>&1 &
輸出錯誤信息到提示符窗口
1 表示輸出信息到提示符窗口, 1前面的&注意添加, 否則還會創建一個名為1的文件
if [ $? = 0 ]; then
sleep 30
ssh $remote_user@$remote_ip "tail -n 50 $remote_path/out.log"
fi
程序休眠30s后查看日志