Shell脚本实现简单的进程管理器

需求

现在我用python写了一个前后端分离项目,每次启动都需要使用python3+脚本名称,杀死进程时还需要ps -ef | grep 脚本名称,显得非常的麻烦,考虑用shell脚本实现一个简单的进程管理器,方便管理进程

进程管理器实现

  1. 定义启动后端和前端的函数

    start_back_end() {  
        echo "正在启动后端..."  
        nohup python3 start_back_end.py &  
        sleep 1  # 等待一段时间确保进程已经启动
        echo "后端启动成功"
    }  
    
    # 定义启动前端的函数  
    start_front_end() {  
        echo "正在启动前端..."  
        nohup python3 start_front_end.py &  
        sleep 1  # 等待一段时间确保进程已经启动
        echo "前端启动成功"
    }  
    
    
  2. 定义停止后端和前端的函数

    # 定义停止后端的函数  
    stop_back_end() {  
        echo "正在停止后端..."  
        pkill -f start_back_end.py  
        sleep 1  # 等待一段时间确保进程已经停止
        echo "后端停止成功"
    }  
      
    # 定义停止前端的函数  
    stop_front_end() {  
        echo "正在停止前端..."  
        pkill -f start_front_end.py  
        sleep 1  # 等待一段时间确保进程已经停止
        echo "前端停止成功"
    }  
    
  3. 定义重启后端和前端的函数

    # 定义重启后端的函数  
    restart_back_end() {  
        stop_back_end  
        sleep 1  # 等待一段时间确保进程已经停止  
        start_back_end  
    }  
      
    # 定义重启前端的函数  
    restart_front_end() {  
        stop_front_end  
        sleep 1  # 等待一段时间确保进程已经停止  
        start_front_end  
    }  
    
  4. 定义显示启动说明的函数

    usage() {  
        echo "使用说明:"  
        echo "  $0 start       - 启动前端和后端"  
        echo "  $0 stop        - 停止前端和后端"  
        echo "  $0 restart     - 重启前端和后端"  
        echo "  $0 start-fe    - 仅启动前端"  
        echo "  $0 stop-fe     - 仅停止前端"  
        echo "  $0 restart-fe  - 仅重启前端"  
        echo "  $0 start-be    - 仅启动后端"  
        echo "  $0 stop-be     - 仅停止后端"  
        echo "  $0 restart-be  - 仅重启后端"  
    }  
    
  5. 主逻辑

    # 主逻辑  
    if [ "$#" -ne 1 ]; then  
        usage  
        exit 1  
    fi  
      
    case "$1" in  
        start)  
            start_front_end  
            start_back_end  
            ;;  
        stop)  
            stop_front_end  
            stop_back_end  
            ;;  
        restart)  
            restart_front_end  
            restart_back_end  
            ;;  
        start-fe)  
            start_front_end  
            ;;  
        stop-fe)  
            stop_front_end  
            ;;  
        restart-fe)  
            restart_front_end  
            ;;  
        start-be)  
            start_back_end  
            ;;  
        stop-be)  
            stop_back_end  
            ;;  
        restart-be)  
            restart_back_end  
            ;;  
        *)  
            usage  
            exit 1  
            ;;  
    esac
    
  6. 脚本全部内容

    #!/bin/bash  
      
    # 定义启动后端的函数  
    start_back_end() {  
        echo "正在启动后端..."  
        nohup python3 start_back_end.py &  
        sleep 1  # 等待一段时间确保进程已经启动
        echo "后端启动成功"
    }  
      
    # 定义启动前端的函数  
    start_front_end() {  
        echo "正在启动前端..."  
        nohup python3 start_front_end.py &  
        sleep 1  # 等待一段时间确保进程已经启动
        echo "前端启动成功"
    }  
      
    # 定义停止后端的函数  
    stop_back_end() {  
        echo "正在停止后端..."  
        pkill -f start_back_end.py  
        sleep 1  # 等待一段时间确保进程已经停止
        echo "后端停止成功"
    }  
      
    # 定义停止前端的函数  
    stop_front_end() {  
        echo "正在停止前端..."  
        pkill -f start_front_end.py  
        sleep 1  # 等待一段时间确保进程已经停止
        echo "前端停止成功"
    }  
      
    # 定义重启后端的函数  
    restart_back_end() {  
        stop_back_end  
        sleep 1  # 等待一段时间确保进程已经停止  
        start_back_end  
    }  
      
    # 定义重启前端的函数  
    restart_front_end() {  
        stop_front_end  
        sleep 1  # 等待一段时间确保进程已经停止  
        start_front_end  
    }  
      
    # 显示使用说明的函数  
    usage() {  
        echo "使用说明:"  
        echo "  $0 start       - 启动前端和后端"  
        echo "  $0 stop        - 停止前端和后端"  
        echo "  $0 restart     - 重启前端和后端"  
        echo "  $0 start-fe    - 仅启动前端"  
        echo "  $0 stop-fe     - 仅停止前端"  
        echo "  $0 restart-fe  - 仅重启前端"  
        echo "  $0 start-be    - 仅启动后端"  
        echo "  $0 stop-be     - 仅停止后端"  
        echo "  $0 restart-be  - 仅重启后端"  
    }  
      
    # 主逻辑  
    if [ "$#" -ne 1 ]; then  
        usage  
        exit 1  
    fi  
      
    case "$1" in  
        start)  
            start_front_end  
            start_back_end  
            ;;  
        stop)  
            stop_front_end  
            stop_back_end  
            ;;  
        restart)  
            restart_front_end  
            restart_back_end  
            ;;  
        start-fe)  
            start_front_end  
            ;;  
        stop-fe)  
            stop_front_end  
            ;;  
        restart-fe)  
            restart_front_end  
            ;;  
        start-be)  
            start_back_end  
            ;;  
        stop-be)  
            stop_back_end  
            ;;  
        restart-be)  
            restart_back_end  
            ;;  
        *)  
            usage  
            exit 1  
            ;;  
    esac
    

脚本运行效果

  1. 启动进程

    ./control.sh start
    

    在这里插入图片描述

  2. 结束进程

    ./control.sh stop
    

    在这里插入图片描述

  3. 重启进程

    ./control.sh restart
    

    在这里插入图片描述

Logo

GitCode 天启AI是一款由 GitCode 团队打造的智能助手,基于先进的LLM(大语言模型)与多智能体 Agent 技术构建,致力于为用户提供高效、智能、多模态的创作与开发支持。它不仅支持自然语言对话,还具备处理文件、生成 PPT、撰写分析报告、开发 Web 应用等多项能力,真正做到“一句话,让 Al帮你完成复杂任务”。

更多推荐