102 lines
2.4 KiB
Python
102 lines
2.4 KiB
Python
import os
|
|
import sys
|
|
import subprocess
|
|
import configparser
|
|
|
|
help_message = """
|
|
Usage: app.ini [options]
|
|
|
|
start start the server
|
|
stop stop the server
|
|
restart restart the server
|
|
status get the server status
|
|
"""
|
|
|
|
cfg = None
|
|
FuncMap = {}
|
|
dir_path = ""
|
|
app_path = ""
|
|
|
|
def main():
|
|
global cfg, dir_path, app_path
|
|
|
|
if len(sys.argv) < 2:
|
|
print(help_message)
|
|
sys.exit(1)
|
|
|
|
# 获取当前文件的绝对路径
|
|
exec_path = os.path.abspath(sys.argv[0])
|
|
dir_path = os.path.dirname(exec_path)
|
|
# print(f"当前文件的绝对路径的文件夹路径: {dir_path}")
|
|
|
|
# 加载 app.ini 文件
|
|
cfg = configparser.ConfigParser()
|
|
cfg.read(os.path.join(dir_path, "app.ini"))
|
|
app_path = cfg.get("app", "app_path")
|
|
|
|
register("start", start)
|
|
register("stop", stop)
|
|
|
|
func_name = sys.argv[1]
|
|
if func_name in FuncMap:
|
|
FuncMap[func_name]()
|
|
else:
|
|
print(help_message)
|
|
sys.exit(1)
|
|
|
|
def register(name, func):
|
|
FuncMap[name] = func
|
|
|
|
def start():
|
|
print("start")
|
|
NodeType = sys.argv[2]
|
|
Zone = sys.argv[3]
|
|
app_name = cfg.get("app", "app_name")
|
|
|
|
cmd_name = app_path + "/main"
|
|
cmd_args = [f"{app_path}/zone/{app_name}_{NodeType}_{Zone}/server.json"]
|
|
|
|
# 创建命令
|
|
cmd = [cmd_name] + cmd_args
|
|
print(cmd)
|
|
|
|
# 启动命令
|
|
process = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, start_new_session=True)
|
|
print(f"p {process.pid} s")
|
|
|
|
# 获取命令输出
|
|
stdout, stderr = process.communicate()
|
|
print("e:", stdout.decode('utf-8', errors='ignore'))
|
|
print("e2:", stderr.decode('utf-8', errors='ignore'))
|
|
|
|
def stop():
|
|
print("stop")
|
|
NodeType = sys.argv[2]
|
|
Zone = sys.argv[3]
|
|
app_name = cfg.get("app", "app_name")
|
|
process_args = f"{app_path}/zone/{app_name}_{NodeType}_{Zone}/server.json"
|
|
|
|
# 获取进程号
|
|
pid = get_pid_by_args(process_args)
|
|
if pid is None:
|
|
print("未找到进程")
|
|
sys.exit(1)
|
|
|
|
# 关闭进程
|
|
try:
|
|
os.kill(pid, 9)
|
|
print(f"进程 {pid} 已关闭")
|
|
except OSError as e:
|
|
print(f"关闭进程失败: {e}")
|
|
sys.exit(1)
|
|
|
|
def get_pid_by_args(args):
|
|
try:
|
|
output = subprocess.check_output(["pgrep", "-f", args])
|
|
pid_str = output.decode().strip().split("\n")[0]
|
|
return int(pid_str)
|
|
except subprocess.CalledProcessError:
|
|
return None
|
|
|
|
if __name__ == "__main__":
|
|
main() |