用python启动nacos和redis

在这里插入图片描述

import subprocess
import tkinter as tk
from tkinter import ttk, messagebox
from subprocess import Popen, run, PIPE


# 启动Nacos的函数
def start_nacos():
    startup_cmd_path = r'D:\environment\code-software\nacos-server-1.4.1\nacos\bin\startup.cmd'
    # 异步启动Nacos
    Popen([startup_cmd_path, '-m', 'standalone'])
    messagebox.showinfo("Nacos状态", "Nacos 启动命令已发送,请检查Nacos是否已启动。")


# 启动Redis的函数
def start_redis():
    Popen([r'D:\environment\redis\Redis-x64-5.0.14.1\redis-server.exe',
           r'D:\environment\redis\Redis-x64-5.0.14.1\redis.windows.conf'])
    messagebox.showinfo("Redis状态", "Redis启动命令已发送,请检查Redis是否已启动。")


# 查找指定端口占用的进程ID
def find_pid_by_port(port):
    """
    通过端口号查找对应的进程ID(PID)

    :param port: 要查找的端口号
    :return: 端口对应的进程ID,如果找不到则返回None
    """
    # 构造命令行命令,使用netstat -ano列出所有连接和侦听端口,然后通过findstr搜索指定端口
    command = f"netstat -ano | findstr :{port}"
    # 执行命令行命令,shell=True允许命令通过shell执行,stdout和stderr捕获输出,text=True确保输出为文本
    result = subprocess.run(command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
    # 检查命令执行是否成功(即返回值是否为0),如果不成功(如找不到端口)则返回None
    if result.returncode != 0:
        return None
    # 遍历命令输出的每一行
    for line in result.stdout.split('\n'):
        # 将每行按空格分割成多个部分
        parts = line.split()
        # 如果分割后的列表不为空,取最后一个元素作为可能的PID部分
        # 如果列表为空,则pid_part设置为空字符串
        pid_part = parts[-1] if parts else ''
        # 检查pid_part是否全为数字且大于0,如果是,则返回该PID
        if pid_part.isdigit() and int(pid_part) > 0:
            return int(pid_part)
    # 如果遍历完所有行都没有找到合适的PID,则返回None
    return None


# 杀死指定PID的进程
def kill_process(pid):
    command = f"taskkill /F /PID {pid}"
    result = run(command, shell=True, stdout=PIPE, stderr=PIPE, text=True)
    if result.returncode == 0:
        return f"进程ID为 {pid} 的进程已成功被杀死。"
    else:
        return f"无法杀死进程ID为 {pid} 的进程: {result.stderr}"


# 按钮点击事件处理函数
def on_button_click():
    """
       处理按钮点击事件,用于查找并可能杀死监听在指定端口上的进程。
       """
    # 从某个GUI组件(如Entry小部件)中获取用户输入的端口号
    port_input = port_entry.get()

    try:
        # 尝试将用户输入的字符串转换为整数
        port = int(port_input)
        # 调用find_pid_by_port函数查找端口对应的进程ID
        pid = find_pid_by_port(port)
        # 如果找到了进程ID
        if pid:
            # 调用kill_process函数尝试杀死该进程,并获取操作结果消息
            message = kill_process(pid)
            # 使用messagebox显示操作结果
            messagebox.showinfo("进程操作结果", message)
        else:
            # 如果没有找到进程ID,显示消息框告知用户
            messagebox.showinfo("未找到进程", f"没有找到监听在端口 {port} 上的进程。")
    except ValueError:
        # 如果在转换端口号时发生ValueError(即输入的不是有效的整数),显示错误消息
        messagebox.showerror("输入错误", "请输入有效的端口号(整数)。")


# 主函数
def main():
    root = tk.Tk()
    root.title("服务启动器")

    # 输入端口号的标签和输入框
    label = tk.Label(root, text="请输入端口号:")
    label.pack(pady=10)

    global port_entry
    port_entry = tk.Entry(root)  # 使用局部变量,通过闭包在on_button_click中访问
    port_entry.pack(pady=10)

    # 杀死进程按钮
    kill_button = tk.Button(root, text="杀死进程", command=on_button_click)
    kill_button.pack(pady=10)

    # 放置启动按钮的Frame
    frame = ttk.Frame(root, padding="50 50 50 50")
    frame.pack(pady=20)

    # 启动Nacos和Redis的按钮
    btn_start_nacos = ttk.Button(frame, text="启动Nacos", command=start_nacos)
    btn_start_nacos.pack(side=tk.LEFT, padx=10, pady=10)

    btn_start_redis = ttk.Button(frame, text="启动Redis", command=start_redis)
    btn_start_redis.pack(side=tk.RIGHT, padx=10, pady=10)

    # 尝试设置ttk主题
    style = ttk.Style()
    try:
        style.theme_use('clam')
    except tk.TclError:
        print("主题clam不可用,使用默认主题。")

    root.mainloop()


if __name__ == "__main__":
    main()

打包成exe文件
命令:


pip install Pyinstaller

pyinstaller -F --noconsole .\你的文件名.py

### 回答1: 我可以给你一个示例:#!/bin/bash# 安装并启动Nacos服务 yum install nacos -y systemctl start nacos# 安装并启动Redis服务 yum install redis -y systemctl start redis# 安装并启动RabbitMQ服务 yum install rabbitmq-server -y systemctl start rabbitmq-server ### 回答2: 可以编写一个名为start_services.sh的shell脚本来实现自动启动nacosredis和rabbitmq服务。 ```shell #!/bin/bash # 启动nacos服务 echo "Starting Nacos server..." cd /path/to/nacos # 替换为nacos的安装路径 ./startup.sh & # 启动redis服务 echo "Starting Redis server..." redis-server & # 启动rabbitmq服务 echo "Starting RabbitMQ server..." rabbitmq-server & echo "All services started successfully!" ``` 这个脚本首先进入nacos的安装路径,然后执行启动nacos的脚本startup.sh,并使用"&"符号将其放入后台运行。接着启动redis-server和rabbitmq-server服务,并同样将它们放入后台运行。 保存以上脚本为start_services.sh文件,并在命令行中执行以下命令来运行脚本: ```shell chmod +x start_services.sh # 添加可执行权限 ./start_services.sh # 运行脚本 ``` 执行脚本后,会在命令行中显示相应的提示信息,确认所有服务已成功启动。 ### 回答3: 可以编写以下的Shell脚本来自动启动NacosRedis、RabbitMQ服务: ```bash #!/bin/bash # 启动Nacos服务 nacos_start() { echo "Starting Nacos..." # TODO: 添加启动Nacos的命令 } # 启动Redis服务 redis_start() { echo "Starting Redis..." # TODO: 添加启动Redis的命令 } # 启动RabbitMQ服务 rabbitmq_start() { echo "Starting RabbitMQ..." # TODO: 添加启动RabbitMQ的命令 } # 主函数 main() { echo "Starting services..." # 调用函数启动各个服务 nacos_start redis_start rabbitmq_start echo "All services are started!" } # 调用主函数 main ``` 在上述脚本中,我们定义了三个函数来启动NacosRedis和RabbitMQ服务,并在主函数中按顺序调用了这些函数。你需要根据实际情况,将每个服务启动的命令填充到对应的函数中。同时,你还可以根据需要添加其他的服务启动函数或修改脚本中的输出信息。最后,通过在终端中执行该脚本,即可自动启动这三个服务。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azure++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值