Last active 1775709774

通用Jar管理脚本 v1.0

doracoin's Avatar doracoin revised this gist 1775709774. Go to revision

1 file changed, 327 insertions

jar-manager.sh(file created)

@@ -0,0 +1,327 @@
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
Newer Older