完成
This commit is contained in:
parent
d056c491a6
commit
85277ad67d
5
.gitignore
vendored
5
.gitignore
vendored
@ -16,3 +16,8 @@ bin-release/
|
|||||||
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
|
# Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
|
||||||
# should NOT be excluded as they contain compiler settings and other important
|
# should NOT be excluded as they contain compiler settings and other important
|
||||||
# information for Eclipse / Flash Builder.
|
# information for Eclipse / Flash Builder.
|
||||||
|
temp.bat
|
||||||
|
winServerManage.exe
|
||||||
|
winServerManage.spec
|
||||||
|
build/
|
||||||
|
peer3/
|
||||||
|
|||||||
BIN
WinSW-x64.exe
Normal file
BIN
WinSW-x64.exe
Normal file
Binary file not shown.
1
build.bat
Normal file
1
build.bat
Normal file
@ -0,0 +1 @@
|
|||||||
|
pyinstaller -F -w index.py -n winServerManage --distpath ./
|
||||||
235
index.py
Normal file
235
index.py
Normal file
@ -0,0 +1,235 @@
|
|||||||
|
#!/usr/bin/python3
|
||||||
|
|
||||||
|
# 导入包
|
||||||
|
from tkinter import *
|
||||||
|
import tkinter.messagebox
|
||||||
|
import json
|
||||||
|
import socket
|
||||||
|
import os
|
||||||
|
|
||||||
|
|
||||||
|
serverConfig = {}
|
||||||
|
|
||||||
|
# 获取服务状态
|
||||||
|
def getState():
|
||||||
|
global serverConfig
|
||||||
|
for server in serverConfig["serverList"]:
|
||||||
|
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
|
||||||
|
result = sock.connect_ex(('127.0.0.1', server["port"]))
|
||||||
|
if result == 0:
|
||||||
|
server["starting"] = True
|
||||||
|
else:
|
||||||
|
server["starting"] = False
|
||||||
|
sock.close()
|
||||||
|
|
||||||
|
# 读取服务配置文件
|
||||||
|
with open('server.json', 'rb') as f:
|
||||||
|
serverConfig = json.load(f)
|
||||||
|
getState()
|
||||||
|
|
||||||
|
# 获取服务配置信息
|
||||||
|
def getServer():
|
||||||
|
global listbox
|
||||||
|
global serverConfig
|
||||||
|
if (len(listbox.curselection()) <= 0):
|
||||||
|
tkinter.messagebox.showinfo(title='错误提示', message='请选择服务')
|
||||||
|
return
|
||||||
|
|
||||||
|
index = listbox.curselection()[0]
|
||||||
|
return serverConfig["serverList"][index]
|
||||||
|
|
||||||
|
def showList(isRefresh):
|
||||||
|
global listbox
|
||||||
|
global serverConfig
|
||||||
|
# 读取服务配置文件
|
||||||
|
with open('server.json', 'rb') as f:
|
||||||
|
serverConfig = json.load(f)
|
||||||
|
getState()
|
||||||
|
|
||||||
|
listbox.delete(0, END)
|
||||||
|
for server in (serverConfig['serverList']):
|
||||||
|
listbox.insert(END, f' 服务名称:{server["name"]} | 文件位置:{server["dir"]} | 端口:{server["port"]} | 描述:{server["desc"]} | 状态:{ "运行中" if server["starting"] == True else "未启动"}')
|
||||||
|
|
||||||
|
if isRefresh:
|
||||||
|
tkinter.messagebox.showinfo(title='消息提示', message='刷新成功')
|
||||||
|
|
||||||
|
# 控制台启动
|
||||||
|
def start():
|
||||||
|
server = getServer()
|
||||||
|
|
||||||
|
bat = f'''@echo off
|
||||||
|
cd {server["dir"]}
|
||||||
|
SET port={server["port"]}
|
||||||
|
for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
|
||||||
|
if [%%d] EQU [LISTENING] (
|
||||||
|
set pid=%%e
|
||||||
|
)
|
||||||
|
)
|
||||||
|
echo close : %port% %pid%
|
||||||
|
if not "%pid%" == "" taskkill /f /pid %pid%
|
||||||
|
|
||||||
|
echo start
|
||||||
|
PING 127.1 -n 5 >nul
|
||||||
|
java -jar {server["args"]} {server["jar"]}
|
||||||
|
|
||||||
|
pause
|
||||||
|
exit'''
|
||||||
|
file = open("temp.bat", 'w', encoding='utf-8')
|
||||||
|
file.write(bat)
|
||||||
|
file.close()
|
||||||
|
# 开启cmd来执行bat文件,以便查看执行情况
|
||||||
|
os.system("start temp.bat")
|
||||||
|
|
||||||
|
# 后台启动
|
||||||
|
def startw():
|
||||||
|
server = getServer()
|
||||||
|
|
||||||
|
# 构建执行bat
|
||||||
|
bat = f'''@echo off
|
||||||
|
cd {server["dir"]}
|
||||||
|
SET port={server["port"]}
|
||||||
|
for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
|
||||||
|
if [%%d] EQU [LISTENING] (
|
||||||
|
set pid=%%e
|
||||||
|
)
|
||||||
|
)
|
||||||
|
echo close : %port% %pid%
|
||||||
|
if not "%pid%" == "" taskkill /f /pid %pid%
|
||||||
|
|
||||||
|
echo start
|
||||||
|
PING 127.1 -n 5 >nul
|
||||||
|
javaw -jar {server["args"]} {server["jar"]}
|
||||||
|
|
||||||
|
pause
|
||||||
|
exit'''
|
||||||
|
file = open("temp.bat", 'w', encoding='utf-8')
|
||||||
|
file.write(bat)
|
||||||
|
file.close()
|
||||||
|
# 开启cmd来执行bat文件,以便查看执行情况
|
||||||
|
os.system("start temp.bat")
|
||||||
|
|
||||||
|
# 停止服务
|
||||||
|
def stop():
|
||||||
|
server = getServer()
|
||||||
|
|
||||||
|
# 构建执行bat
|
||||||
|
bat = f'''@echo off
|
||||||
|
SET port={server["port"]}
|
||||||
|
for /f "usebackq tokens=1-5" %%a in (`netstat -ano ^| findstr %port%`) do (
|
||||||
|
if [%%d] EQU [LISTENING] (
|
||||||
|
set pid=%%e
|
||||||
|
)
|
||||||
|
)
|
||||||
|
echo close : %port% %pid%
|
||||||
|
if not "%pid%" == "" taskkill /f /pid %pid%
|
||||||
|
|
||||||
|
pause
|
||||||
|
exit'''
|
||||||
|
|
||||||
|
file = open("temp.bat", 'w', encoding='utf-8')
|
||||||
|
file.write(bat)
|
||||||
|
file.close()
|
||||||
|
# 开启cmd来执行bat文件,以便查看执行情况
|
||||||
|
os.system("start temp.bat")
|
||||||
|
|
||||||
|
# 安装服务
|
||||||
|
def install():
|
||||||
|
server = getServer()
|
||||||
|
|
||||||
|
# 生成xml配置文件
|
||||||
|
xml = f'''
|
||||||
|
<service>
|
||||||
|
<id>{server["name"]}</id>
|
||||||
|
<name>{server["name"]}</name>
|
||||||
|
<description>{server["desc"]}</description>
|
||||||
|
<executable>java</executable>
|
||||||
|
<arguments> -jar {server["args"]} {server["jar"]}</arguments>
|
||||||
|
|
||||||
|
<!--服务启动方式:Automatic-自动,Manual-手动-->
|
||||||
|
<startmode>Automatic</startmode>
|
||||||
|
<!-- 日志配置 -->
|
||||||
|
<logpath>{os.path.abspath(os.path.dirname(__file__))}\{server["dir"]}\logs\winsw</logpath>
|
||||||
|
<log mode="none"/>
|
||||||
|
</service>
|
||||||
|
'''
|
||||||
|
file = open(f'{server["dir"]}/server.xml', 'w', encoding='utf-8')
|
||||||
|
file.write(xml)
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
# 构建执行bat
|
||||||
|
bat = f'''@echo off
|
||||||
|
sc stop {server["name"]}
|
||||||
|
echo stop {server["name"]}
|
||||||
|
|
||||||
|
sc delete {server["name"]}
|
||||||
|
echo uninstall {server["name"]}
|
||||||
|
|
||||||
|
WinSW-x64.exe install {server["dir"]}\server.xml
|
||||||
|
echo install {server["name"]}
|
||||||
|
|
||||||
|
sc start {server["name"]}
|
||||||
|
echo start {server["name"]}
|
||||||
|
|
||||||
|
pause
|
||||||
|
exit'''
|
||||||
|
|
||||||
|
file = open("temp.bat", 'w', encoding='utf-8')
|
||||||
|
file.write(bat)
|
||||||
|
file.close()
|
||||||
|
# 开启cmd来执行bat文件,以便查看执行情况
|
||||||
|
os.system("start temp.bat")
|
||||||
|
|
||||||
|
# 卸载服务
|
||||||
|
def unInstall():
|
||||||
|
server = getServer()
|
||||||
|
|
||||||
|
# 构建执行bat
|
||||||
|
bat = f'''@echo off
|
||||||
|
sc stop {server["name"]}
|
||||||
|
echo stop {server["name"]}
|
||||||
|
|
||||||
|
sc delete {server["name"]}
|
||||||
|
echo uninstall {server["name"]}
|
||||||
|
|
||||||
|
pause
|
||||||
|
exit'''
|
||||||
|
|
||||||
|
file = open("temp.bat", 'w', encoding='utf-8')
|
||||||
|
file.write(bat)
|
||||||
|
file.close()
|
||||||
|
# 开启cmd来执行bat文件,以便查看执行情况
|
||||||
|
os.system("start temp.bat")
|
||||||
|
|
||||||
|
# 第1步,实例化object,建立窗口window
|
||||||
|
window = Tk()
|
||||||
|
# 第2步,给窗口的可视化起名字
|
||||||
|
window.title('window下SpringBoot部署程序')
|
||||||
|
# 第3步,设定窗口的大小(长 * 宽)
|
||||||
|
window.geometry('850x250') # 这里的乘是小x
|
||||||
|
window.configure(bg='#FFFFFF') # 这里的乘是小x
|
||||||
|
|
||||||
|
## 渲染各个服务 - 设置单选
|
||||||
|
Label(window, text='请选择对应服务操作', bg='#CCCCCC', height=2, font=(20)).pack()
|
||||||
|
|
||||||
|
listbox = Listbox(window, selectmode=SINGLE, font=(28), width=80, height=len(serverConfig['serverList']) + 1, activestyle="none", bd=0)
|
||||||
|
listbox.pack(fill=X, pady=10)
|
||||||
|
showList(False)
|
||||||
|
|
||||||
|
# 渲染按钮
|
||||||
|
buttonFrame = Frame(window, bg="#FFFFFF")
|
||||||
|
buttonFrame.pack(pady=20)
|
||||||
|
|
||||||
|
stratButton = Button(buttonFrame, text='启动(控制台)', command=start)
|
||||||
|
stratwButton = Button(buttonFrame, text='启动(后台)', command=startw)
|
||||||
|
stopButton = Button(buttonFrame, text='停止服务', command=stop)
|
||||||
|
installButton = Button(buttonFrame, text='安装服务(使用winsw安装到系统服务上)', command=install)
|
||||||
|
unInstallButton = Button(buttonFrame, text='卸载服务(从系统服务上卸载)', command=unInstall)
|
||||||
|
updateStateButton = Button(buttonFrame, text='刷新服务状态', command=lambda:showList(True))
|
||||||
|
|
||||||
|
stratButton.pack(side=LEFT, padx=10)
|
||||||
|
stratwButton.pack(side=LEFT, padx=10)
|
||||||
|
stopButton.pack(side=LEFT, padx=10)
|
||||||
|
installButton.pack(side=LEFT, padx=10)
|
||||||
|
unInstallButton.pack(side=LEFT, padx=10)
|
||||||
|
updateStateButton.pack(side=LEFT, padx=10)
|
||||||
|
window.mainloop()
|
||||||
12
server.json
Normal file
12
server.json
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
{
|
||||||
|
"serverList":[
|
||||||
|
{
|
||||||
|
"dir":"peer3",
|
||||||
|
"name":"kd-peer3",
|
||||||
|
"port":8763,
|
||||||
|
"desc":"注册服务3",
|
||||||
|
"args":"-Xms128m -Xmx128m -Xmn10m -XX:NewSize=10m",
|
||||||
|
"jar":"eureka-service-0.0.1-SNAPSHOT.jar"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue
Block a user