完成
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`
|
||||
# should NOT be excluded as they contain compiler settings and other important
|
||||
# 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