Utoljára aktív 1775709774

通用Jar管理脚本 v1.0

Revízió 42ad72cbea13fa89afdcd67427303ea76a3ca7b3

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