You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Bash脚本启动两个独立虚拟环境中的Python微服务

一键启动双Python微服务的Bash脚本

脚本功能

该脚本会自动检查每个服务的虚拟环境,不存在则创建并安装依赖,随后在后台启动两个服务并记录运行日志,实现近乎同时启动的效果。

完整脚本

#!/bin/bash

# 定义两个服务的目录
SERVICE_DIRS=(
    "/my_app/do_something"
    "/my_app/do_something_else"
)

# 日志输出目录(可按需修改)
LOG_DIR="/var/log/my_services"
mkdir -p "$LOG_DIR"

# 遍历处理每个服务
for DIR in "${SERVICE_DIRS[@]}"; do
    # 进入服务目录,失败则退出
    cd "$DIR" || { echo "无法访问目录: $DIR"; exit 1; }

    # 检查虚拟环境,不存在则创建
    if [ ! -d "venv" ]; then
        echo "为 $DIR 创建虚拟环境..."
        python3.10 -m venv venv
        [ $? -ne 0 ] && { echo "虚拟环境创建失败: $DIR"; exit 1; }
    fi

    # 激活虚拟环境并安装/更新依赖
    echo "为 $DIR 同步依赖..."
    source venv/bin/activate
    pip install -r requirements.txt --upgrade
    deactivate

    # 后台启动服务并输出日志
    SERVICE_NAME=$(basename "$DIR")
    echo "启动服务: $SERVICE_NAME"
    source venv/bin/activate
    nohup python main.py > "$LOG_DIR/$SERVICE_NAME.log" 2>&1 &
    deactivate

    # 记录服务PID,方便后续停止
    echo $! > "$DIR/$SERVICE_NAME.pid"
done

echo "所有服务已启动,日志路径: $LOG_DIR"

使用步骤

  1. 将脚本保存为start_services.sh
  2. 赋予执行权限:chmod +x start_services.sh
  3. 运行脚本:./start_services.sh

配套操作建议

  • 停止服务:执行以下命令停止单个服务,或编写配套停止脚本:
    # 停止do_something服务
    kill $(cat /my_app/do_something/do_something.pid)
    # 停止do_something_else服务
    kill $(cat /my_app/do_something_else/do_something_else.pid)
    
  • 查看实时日志:tail -f /var/log/my_services/do_something.log
  • 开机自启:推荐创建systemd服务单元(稳定性更高),示例配置如下:
    [Unit]
    Description=My Python Services
    After=postgresql.service
    
    [Service]
    Type=forking
    ExecStart=/path/to/start_services.sh
    User=your_username
    
    [Install]
    WantedBy=multi-user.target
    
    保存为/etc/systemd/system/my_services.service后,执行sudo systemctl daemon-reload && sudo systemctl enable --now my_services

注意事项

  • 确保系统已安装python3.10-venv包,未安装则执行sudo apt install python3.10-venv
  • 脚本需对服务目录和日志目录拥有读写权限
  • 若服务依赖Postgres,可在脚本开头加入systemctl is-active --quiet postgresql || sudo systemctl start postgresql(需脚本有sudo权限)

内容的提问来源于stack exchange,提问作者Kai Chaza

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.08 18:42:35