zhanghua
2025-03-04 0f5901bbc027e2e8d934280ca659734a61f67378
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
#!/bin/bash
#定义服务数组
serviceArr=(ycl)
#当前路径
rootPath=$(pwd)
#输入操作方式
read -p "请输入操作方式对应的序号:
1.start
2.stop
-> " action
echo ----------------------------------------------------------------------------------
#输入操作服务
read -p "请输入需要操作的服务对应的序号,请以空格分隔:
1.ycl
-> "
servers=$REPLY
echo ----------------------------------------------------------------------------------
#判断操作
if [ "$action" -eq 1 ];then
    read -p "请输入启动环境参数(如不指定,默认为开发环境):
dev-开发环境
prod-生产环境
test-本地测试环境
onlinetest-线上测试环境
-> " env
echo ----------------------------------------------------------------------------------
    if [ -n "$env" ];then
        envConfig="--spring.profiles.active="${env}
    fi
    for i in $servers
    do    
        if [ $i -gt 1 ];then
            echo 输入的服务序号过大
        elif [ $i -lt 1 ];then
                echo 输入的服务序号过小
        else
            i=$(($i-1))
            echo 正在启动服务 ${serviceArr[$i]}
            cd $rootPath/${serviceArr[$i]}
            # java启动参数 $startConfig
            #-Xms128m 最小堆
            #-Xmx256m 最大堆 此值可以设置与-Xms相同,以避免每次垃圾回收完成后JVM重新分配内存
            #-Xmn2g 年轻代
            #-Xss128k 线程堆大小a
            #BackManager配置
            if [[ $serviceArr[$i] =~ "ycl" ]];then
                startConfig="-Xms400m -Xmx400m"
            else
                startConfig="-Xms400m -Xmx400m"
            fi
            echo 在路径 $(pwd) 下
            echo 执行 nohup java $startConfig -jar *.jar $envconfig "&"
            nohup java $startConfig -jar *.jar $envConfig &
            pid=$(ps -ef|grep -i ${serviceArr[$i]}|grep .jar|grep -v grep|awk '{print $2}')
            if [ -n "$pid" ];then
                echo 启动服务 ${serviceArr[$i]} 成功,进程ID为: $pid
            else
                echo 启动服务 ${serviceArr[$i]} 失败,执行的命令为:
                echo nohup java $startConfig -jar *.jar $envconfig &
            fi
            echo ----------------------------------------------------------------------------------
        fi
    done
elif [ "$action" -eq 2 ];then
    for i in $servers
    do
        if [ $i -gt 1 ];then
            echo 输入的服务序号过大
        elif [ $i -lt 1 ];then
            echo 输入的服务序号过小
        else
            i=$(($i-1))
            pid=$(ps -ef|grep -i ${serviceArr[$i]}|grep .jar|grep -v grep|awk '{print $2}')
            serverName=$(ps -ef|grep -i ${serviceArr[$i]}|grep .jar|grep -v grep|awk '{print $12}')
            if [ -n "$pid" ];then
                echo 关闭服务 ${serviceArr[$i]} 的进程ID为: $pid
                echo 关闭服务 ${serviceArr[$i]} 的jar包名为: $serverName
                kill -9 $pid
                result=$(ps -ef|grep $pid|grep -v grep)
                if [ -n "$result" ];then
                    echo 关闭服务成功!
                else
                    echo 关闭服务失败! 查询到的进程为:
                    echo $result
                    echo 请重新尝试!
                fi
            else
                echo 未启动服务 ${serviceArr[$i]}
            fi
            echo ----------------------------------------------------------------------------------
        fi
    done
else
    echo 输入的操作方式有误,请重新执行脚本!
fi