jar-manager.sh
· 4.1 KiB · Bash
Sin formato
#!/bin/bash
############################################
# 通用Jar管理脚本 v1.0
############################################
APP_NAME="app-service"
PORT="8080"
BASE_DIR=$(cd "$(dirname "$0")"; pwd)
RELEASE_DIR="$BASE_DIR/releases"
LOG_DIR="$BASE_DIR/logs"
CURRENT_JAR="$BASE_DIR/current.jar"
SYSTEMD_FILE="/etc/systemd/system/${APP_NAME}.service"
JAVA_CMD=$(which java)
############################################
mkdir -p $RELEASE_DIR
mkdir -p $LOG_DIR
############################################
get_pid() {
PID=$(ps -ef | grep "current.jar" | grep -v grep | awk '{print $2}')
}
############################################
start_app() {
get_pid
if [ -n "$PID" ]; then
echo "服务已运行 PID=$PID"
return
fi
echo "启动服务..."
nohup $JAVA_CMD -jar $CURRENT_JAR > $LOG_DIR/app.log 2>&1 &
sleep 2
get_pid
if [ -n "$PID" ]; then
echo "启动成功 PID=$PID"
else
echo "启动失败"
fi
}
############################################
stop_app() {
get_pid
if [ -z "$PID" ]; then
echo "服务未运行"
return
fi
echo "停止服务 PID=$PID"
kill $PID
sleep 2
get_pid
if [ -n "$PID" ]; then
echo "强制停止"
kill -9 $PID
fi
echo "停止完成"
}
############################################
restart_app() {
stop_app
sleep 2
start_app
}
############################################
status_app() {
get_pid
if [ -n "$PID" ]; then
echo "运行中 PID=$PID"
else
echo "未运行"
fi
echo ""
echo "端口检测..."
lsof -i:$PORT
}
############################################
view_log() {
tail -f $LOG_DIR/app.log
}
############################################
publish_version() {
echo "输入jar文件路径:"
read JAR_PATH
if [ ! -f "$JAR_PATH" ]; then
echo "文件不存在"
return
fi
JAR_NAME=$(basename $JAR_PATH)
cp $JAR_PATH $RELEASE_DIR/
ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR
echo "发布版本: $JAR_NAME"
restart_app
clean_old
}
############################################
rollback_version() {
echo "历史版本:"
ls -t $RELEASE_DIR
echo "输入要回滚的jar名称:"
read JAR_NAME
if [ ! -f "$RELEASE_DIR/$JAR_NAME" ]; then
echo "版本不存在"
return
fi
ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR
restart_app
echo "已回滚: $JAR_NAME"
}
############################################
list_versions() {
ls -lt $RELEASE_DIR
}
############################################
clean_old() {
echo "清理旧版本..."
ls -t $RELEASE_DIR/*.jar | tail -n +11 | xargs rm -f
}
############################################
install_systemd() {
echo "安装systemd服务..."
cat > $SYSTEMD_FILE <<EOF
[Unit]
Description=$APP_NAME
After=network.target
[Service]
Type=simple
WorkingDirectory=$BASE_DIR
ExecStart=$JAVA_CMD -jar $CURRENT_JAR
Restart=always
RestartSec=5
[Install]
WantedBy=multi-user.target
EOF
systemctl daemon-reload
systemctl enable $APP_NAME
echo "systemd安装完成"
echo "后续的操作请使用 systemctl 来进行:"
systemctl_help
}
systemctl_help() {
echo "只有执行菜单中 安装systemd服务 之后才可用"
echo "systemctl start "$APP_NAME
echo "systemctl stop "$APP_NAME
echo "systemctl restart "$APP_NAME
echo "systemctl status "$APP_NAME
echo "journalctl -u $APP_NAME -f"
echo "journalctl -u $APP_NAME --since today"
echo "journalctl -u $APP_NAME --since '1 hour ago'"
echo "journalctl -u $APP_NAME -p err"
}
############################################
while true
do
echo ""
echo "=============================="
echo " Jar 管理系统"
echo "=============================="
echo "1. 启动服务"
echo "2. 停止服务"
echo "3. 重启服务"
echo "4. 查看状态"
echo "5. 查看日志"
echo "6. 发布新版本"
echo "7. 回滚版本"
echo "8. 查看历史版本"
echo "9. 安装systemd服务"
echo "10. 清理旧版本"
echo "11. 查看systemd操作示例"
echo "0. 退出"
echo ""
read -p "请选择: " num
echo ""
echo ""
case "$num" in
1)
start_app
;;
2)
stop_app
;;
3)
restart_app
;;
4)
status_app
;;
5)
view_log
;;
6)
publish_version
;;
7)
rollback_version
;;
8)
list_versions
;;
9)
install_systemd
;;
10)
clean_old
;;
11)
systemctl_help
;;
0)
exit
;;
*)
echo "输入错误"
;;
esac
done
| 1 | #!/bin/bash |
| 2 | |
| 3 | ############################################ |
| 4 | # 通用Jar管理脚本 v1.0 |
| 5 | ############################################ |
| 6 | |
| 7 | APP_NAME="app-service" |
| 8 | PORT="8080" |
| 9 | |
| 10 | BASE_DIR=$(cd "$(dirname "$0")"; pwd) |
| 11 | |
| 12 | RELEASE_DIR="$BASE_DIR/releases" |
| 13 | LOG_DIR="$BASE_DIR/logs" |
| 14 | CURRENT_JAR="$BASE_DIR/current.jar" |
| 15 | |
| 16 | SYSTEMD_FILE="/etc/systemd/system/${APP_NAME}.service" |
| 17 | |
| 18 | JAVA_CMD=$(which java) |
| 19 | |
| 20 | ############################################ |
| 21 | |
| 22 | mkdir -p $RELEASE_DIR |
| 23 | mkdir -p $LOG_DIR |
| 24 | |
| 25 | ############################################ |
| 26 | |
| 27 | get_pid() { |
| 28 | |
| 29 | PID=$(ps -ef | grep "current.jar" | grep -v grep | awk '{print $2}') |
| 30 | |
| 31 | } |
| 32 | |
| 33 | ############################################ |
| 34 | |
| 35 | start_app() { |
| 36 | |
| 37 | get_pid |
| 38 | |
| 39 | if [ -n "$PID" ]; then |
| 40 | echo "服务已运行 PID=$PID" |
| 41 | return |
| 42 | fi |
| 43 | |
| 44 | echo "启动服务..." |
| 45 | |
| 46 | nohup $JAVA_CMD -jar $CURRENT_JAR > $LOG_DIR/app.log 2>&1 & |
| 47 | |
| 48 | sleep 2 |
| 49 | |
| 50 | get_pid |
| 51 | |
| 52 | if [ -n "$PID" ]; then |
| 53 | echo "启动成功 PID=$PID" |
| 54 | else |
| 55 | echo "启动失败" |
| 56 | fi |
| 57 | |
| 58 | } |
| 59 | |
| 60 | ############################################ |
| 61 | |
| 62 | stop_app() { |
| 63 | |
| 64 | get_pid |
| 65 | |
| 66 | if [ -z "$PID" ]; then |
| 67 | echo "服务未运行" |
| 68 | return |
| 69 | fi |
| 70 | |
| 71 | echo "停止服务 PID=$PID" |
| 72 | |
| 73 | kill $PID |
| 74 | |
| 75 | sleep 2 |
| 76 | |
| 77 | get_pid |
| 78 | |
| 79 | if [ -n "$PID" ]; then |
| 80 | echo "强制停止" |
| 81 | kill -9 $PID |
| 82 | fi |
| 83 | |
| 84 | echo "停止完成" |
| 85 | |
| 86 | } |
| 87 | |
| 88 | ############################################ |
| 89 | |
| 90 | restart_app() { |
| 91 | |
| 92 | stop_app |
| 93 | sleep 2 |
| 94 | start_app |
| 95 | |
| 96 | } |
| 97 | |
| 98 | ############################################ |
| 99 | |
| 100 | status_app() { |
| 101 | |
| 102 | get_pid |
| 103 | |
| 104 | if [ -n "$PID" ]; then |
| 105 | echo "运行中 PID=$PID" |
| 106 | else |
| 107 | echo "未运行" |
| 108 | fi |
| 109 | |
| 110 | echo "" |
| 111 | |
| 112 | echo "端口检测..." |
| 113 | |
| 114 | lsof -i:$PORT |
| 115 | |
| 116 | } |
| 117 | |
| 118 | ############################################ |
| 119 | |
| 120 | view_log() { |
| 121 | |
| 122 | tail -f $LOG_DIR/app.log |
| 123 | |
| 124 | } |
| 125 | |
| 126 | ############################################ |
| 127 | |
| 128 | publish_version() { |
| 129 | |
| 130 | echo "输入jar文件路径:" |
| 131 | read JAR_PATH |
| 132 | |
| 133 | if [ ! -f "$JAR_PATH" ]; then |
| 134 | echo "文件不存在" |
| 135 | return |
| 136 | fi |
| 137 | |
| 138 | JAR_NAME=$(basename $JAR_PATH) |
| 139 | |
| 140 | cp $JAR_PATH $RELEASE_DIR/ |
| 141 | |
| 142 | ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR |
| 143 | |
| 144 | echo "发布版本: $JAR_NAME" |
| 145 | |
| 146 | restart_app |
| 147 | |
| 148 | clean_old |
| 149 | |
| 150 | } |
| 151 | |
| 152 | ############################################ |
| 153 | |
| 154 | rollback_version() { |
| 155 | |
| 156 | echo "历史版本:" |
| 157 | |
| 158 | ls -t $RELEASE_DIR |
| 159 | |
| 160 | echo "输入要回滚的jar名称:" |
| 161 | |
| 162 | read JAR_NAME |
| 163 | |
| 164 | if [ ! -f "$RELEASE_DIR/$JAR_NAME" ]; then |
| 165 | echo "版本不存在" |
| 166 | return |
| 167 | fi |
| 168 | |
| 169 | ln -sf $RELEASE_DIR/$JAR_NAME $CURRENT_JAR |
| 170 | |
| 171 | restart_app |
| 172 | |
| 173 | echo "已回滚: $JAR_NAME" |
| 174 | |
| 175 | } |
| 176 | |
| 177 | ############################################ |
| 178 | |
| 179 | list_versions() { |
| 180 | |
| 181 | ls -lt $RELEASE_DIR |
| 182 | |
| 183 | } |
| 184 | |
| 185 | ############################################ |
| 186 | |
| 187 | clean_old() { |
| 188 | |
| 189 | echo "清理旧版本..." |
| 190 | |
| 191 | ls -t $RELEASE_DIR/*.jar | tail -n +11 | xargs rm -f |
| 192 | |
| 193 | } |
| 194 | |
| 195 | ############################################ |
| 196 | |
| 197 | install_systemd() { |
| 198 | |
| 199 | echo "安装systemd服务..." |
| 200 | |
| 201 | cat > $SYSTEMD_FILE <<EOF |
| 202 | |
| 203 | [Unit] |
| 204 | Description=$APP_NAME |
| 205 | After=network.target |
| 206 | |
| 207 | [Service] |
| 208 | Type=simple |
| 209 | WorkingDirectory=$BASE_DIR |
| 210 | ExecStart=$JAVA_CMD -jar $CURRENT_JAR |
| 211 | Restart=always |
| 212 | RestartSec=5 |
| 213 | |
| 214 | [Install] |
| 215 | WantedBy=multi-user.target |
| 216 | |
| 217 | EOF |
| 218 | |
| 219 | systemctl daemon-reload |
| 220 | |
| 221 | systemctl enable $APP_NAME |
| 222 | |
| 223 | echo "systemd安装完成" |
| 224 | echo "后续的操作请使用 systemctl 来进行:" |
| 225 | systemctl_help |
| 226 | |
| 227 | } |
| 228 | |
| 229 | systemctl_help() { |
| 230 | echo "只有执行菜单中 安装systemd服务 之后才可用" |
| 231 | echo "systemctl start "$APP_NAME |
| 232 | echo "systemctl stop "$APP_NAME |
| 233 | echo "systemctl restart "$APP_NAME |
| 234 | echo "systemctl status "$APP_NAME |
| 235 | echo "journalctl -u $APP_NAME -f" |
| 236 | echo "journalctl -u $APP_NAME --since today" |
| 237 | echo "journalctl -u $APP_NAME --since '1 hour ago'" |
| 238 | echo "journalctl -u $APP_NAME -p err" |
| 239 | } |
| 240 | |
| 241 | ############################################ |
| 242 | |
| 243 | while true |
| 244 | do |
| 245 | |
| 246 | echo "" |
| 247 | echo "==============================" |
| 248 | echo " Jar 管理系统" |
| 249 | echo "==============================" |
| 250 | |
| 251 | echo "1. 启动服务" |
| 252 | echo "2. 停止服务" |
| 253 | echo "3. 重启服务" |
| 254 | echo "4. 查看状态" |
| 255 | echo "5. 查看日志" |
| 256 | echo "6. 发布新版本" |
| 257 | echo "7. 回滚版本" |
| 258 | echo "8. 查看历史版本" |
| 259 | echo "9. 安装systemd服务" |
| 260 | echo "10. 清理旧版本" |
| 261 | echo "11. 查看systemd操作示例" |
| 262 | echo "0. 退出" |
| 263 | |
| 264 | echo "" |
| 265 | |
| 266 | read -p "请选择: " num |
| 267 | |
| 268 | echo "" |
| 269 | echo "" |
| 270 | |
| 271 | case "$num" in |
| 272 | |
| 273 | 1) |
| 274 | start_app |
| 275 | ;; |
| 276 | |
| 277 | 2) |
| 278 | stop_app |
| 279 | ;; |
| 280 | |
| 281 | 3) |
| 282 | restart_app |
| 283 | ;; |
| 284 | |
| 285 | 4) |
| 286 | status_app |
| 287 | ;; |
| 288 | |
| 289 | 5) |
| 290 | view_log |
| 291 | ;; |
| 292 | |
| 293 | 6) |
| 294 | publish_version |
| 295 | ;; |
| 296 | |
| 297 | 7) |
| 298 | rollback_version |
| 299 | ;; |
| 300 | |
| 301 | 8) |
| 302 | list_versions |
| 303 | ;; |
| 304 | |
| 305 | 9) |
| 306 | install_systemd |
| 307 | ;; |
| 308 | |
| 309 | 10) |
| 310 | clean_old |
| 311 | ;; |
| 312 | |
| 313 | 11) |
| 314 | systemctl_help |
| 315 | ;; |
| 316 | |
| 317 | 0) |
| 318 | exit |
| 319 | ;; |
| 320 | |
| 321 | *) |
| 322 | echo "输入错误" |
| 323 | ;; |
| 324 | |
| 325 | esac |
| 326 | |
| 327 | done |