如何在服务器后台运行Python脚本,并配置虚拟环境与GPU支持

使用Conda虚拟环境在服务器后台运行Python脚本,并检查GPU分配

在服务器开发环境中,我们需要确保Python脚本运行在指定的Conda虚拟环境中,并且确认是否正确分配了GPU资源。本文将通过一个完整的start.sh脚本,完成以下功能:

  1. 安装Miniconda、查询虚拟环境位置;
  2. 创建并激活指定的虚拟环境(如 test);
  3. 检查是否分配GPU给Python脚本;
  4. 在后台运行Python脚本。

一、安装 Miniconda

如果服务器尚未安装Conda,可以按照以下步骤安装 Miniconda;若已经安装,可跳过。

1. 下载Miniconda安装包

根据服务器的操作系统下载对应版本的Miniconda:

  • Linux(64位系统):

    bash 复制代码
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-Linux-x86_64.sh
  • macOS(Intel芯片):

    bash 复制代码
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-x86_64.sh
  • macOS(Apple Silicon芯片):

    bash 复制代码
    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh

2. 安装Miniconda

运行以下命令安装Miniconda:

bash 复制代码
bash Miniconda3-latest-Linux-x86_64.sh

安装过程中按提示操作,选择默认路径(如:/root/miniconda3)。安装完成后,运行以下命令加载Conda:

bash 复制代码
source ~/miniconda3/etc/profile.d/conda.sh

3. 验证安装是否成功

运行以下命令检查Conda是否安装成功:

bash 复制代码
conda --version

如果输出Conda的版本号,则说明安装成功。


二、创建Conda虚拟环境

完成Miniconda安装后,按照以下步骤创建虚拟环境:

1. 创建虚拟环境

运行以下命令创建一个名为test的虚拟环境,并安装指定的Python版本(如 3.9):

bash 复制代码
conda create -n test python=3.9 -y

2. 激活虚拟环境

激活test虚拟环境:

bash 复制代码
conda activate test

3. 安装依赖包

在虚拟环境中安装需要的依赖包,比如numpy(若不需要,可跳过):

bash 复制代码
conda install numpy -y

4.编写测试脚本mian.py

python 复制代码
import time
import datetime

def main():
    print("Python脚本开始运行...")
    while True:
        current_time = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        print(f"当前时间: {current_time}")
        time.sleep(5)  # 每5秒打印一次

if __name__ == "__main__":
    main()

三、脚本内容

简易版start.sh ,包含激活环境、后台运行Python脚本,并将日志保存到output.log:

bash 复制代码
#!/bin/bash

# 启用严格模式
set -e

# 1. 激活Conda虚拟环境
source ~/miniconda3/etc/profile.d/conda.sh
conda activate test

# 2. 后台运行Python脚本
nohup python main.py > output.log 2>&1 &
echo "Python脚本已经在后台运行,日志输出到output.log。"

升级版start.sh ,包含激活环境、检查GPU分配、后台运行Python脚本,检查是否已有脚本运行、保存运行日志的功能:

bash 复制代码
#!/bin/bash

# 启用严格模式:遇到错误或未定义变量时立即退出脚本
set -e  # 遇到错误退出
set -u  # 使用未定义变量时退出

# 1. 初始化Conda环境
# 确保Conda能够正常工作
conda init bash
source ~/miniconda3/etc/profile.d/conda.sh

# 2. 查询Conda虚拟环境列表并激活指定环境
# 检查虚拟环境是否存在
ENV_NAME="test"
if ! conda env list | grep -q "$ENV_NAME"; then
  echo "虚拟环境 $ENV_NAME 不存在,请检查环境名称或创建环境!"
  exit 1
fi

# 激活虚拟环境
conda activate $ENV_NAME
echo "已激活Conda虚拟环境:$ENV_NAME"

# 3. 检查GPU是否可用
# 使用nvidia-smi检测GPU,并检查是否分配给任务
if command -v nvidia-smi &> /dev/null; then
  echo "检测到GPU环境,当前GPU信息如下:"
  nvidia-smi
else
  echo "未检测到GPU,将使用CPU运行。"
fi

# 4. 检查是否已有脚本实例在运行
# 假设需要运行的Python脚本名为main.py
PYTHON_SCRIPT="main.py"

# 查找运行中的脚本进程
RUNNING_PID=$(pgrep -f "$PYTHON_SCRIPT" || echo "")

if [ -n "$RUNNING_PID" ]; then
  echo "检测到正在运行的脚本进程,PID:$RUNNING_PID,正在终止该进程..."
  kill -9 "$RUNNING_PID"
  echo "已终止进程 $RUNNING_PID。"
else
  echo "未检测到正在运行的脚本,准备启动新任务。"
fi

# 5. 后台运行Python脚本并检查GPU分配
# 使用nohup后台运行Python脚本,并将日志保存到output.log
nohup python "$PYTHON_SCRIPT" > output.log 2>&1 &
NEW_PID=$!
echo "Python脚本 $PYTHON_SCRIPT 已在后台运行,日志输出到output.log。"
echo "新任务PID:$NEW_PID"

# 6. 等待一段时间后检查GPU使用情况
sleep 5
if command -v nvidia-smi &> /dev/null; then
  echo "当前的 GPU 使用情况如下:"
  nvidia-smi | grep python || echo "未检测到Python进程使用GPU。"
else
  echo "无法检测GPU使用情况,请确认GPU配置是否正确。"
fi

四、运行脚本

完成脚本编写后,按照以下步骤运行:

1. 赋予执行权限

为脚本添加执行权限:

bash 复制代码
chmod +x start.sh

2. 启动脚本

运行脚本有两种方式:

  • 方式 1:直接运行脚本:

    bash 复制代码
    ./start.sh
  • 方式 2 :使用 bash 启动脚本:

    bash 复制代码
    bash start.sh

两种方式效果相同,任选一种即可。


五、检查脚本运行状态

1. 查看日志

脚本运行的日志会保存在 output.log 文件中,可以通过以下命令查看:

bash 复制代码
tail -f output.log

2. 查看后台任务

通过以下命令查看正在运行的 Python 脚本:

bash 复制代码
ps -ef | grep main.py

3. 停止后台任务

如果需要手动停止后台任务,可以通过 kill 命令终止:

bash 复制代码
kill <PID>

其中 <PID> 是运行的任务进程 ID。


六、总结

通过本文,我们学习了如何从头安装 Miniconda,创建一个名为 test 的虚拟环境,并使用 start.sh 脚本在服务器后台运行 Python 脚本。脚本实现了以下功能:

  1. 自动激活指定的 Conda 虚拟环境;
  2. 检查 GPU 是否可用,并确认 GPU 分配是否正确;
  3. 检查是否已有任务在运行,如果有则终止;
  4. 后台运行 Python 脚本,并将日志保存到文件。

希望本文对你有所帮助!如果你有其他问题或建议,欢迎在评论区留言!

相关推荐
郝学胜-神的一滴12 分钟前
深入解析Python字典的继承关系:从abc模块看设计之美
网络·数据结构·python·程序人生
百锦再15 分钟前
Reactive编程入门:Project Reactor 深度指南
前端·javascript·python·react.js·django·前端框架·reactjs
半桔21 分钟前
【IO多路转接】高并发服务器实战:Reactor 框架与 Epoll 机制的封装与设计逻辑
linux·运维·服务器·c++·io
绵绵细雨中的乡音22 分钟前
深入理解 ET 与 LT 模式及其在 Reactor 模型中的应用
服务器·网络·php
HABuo1 小时前
【linux文件系统】磁盘结构&文件系统详谈
linux·运维·服务器·c语言·c++·ubuntu·centos
Howrun7771 小时前
关于Linux服务器的协作问题
linux·运维·服务器
喵手2 小时前
Python爬虫实战:旅游数据采集实战 - 携程&去哪儿酒店机票价格监控完整方案(附CSV导出 + SQLite持久化存储)!
爬虫·python·爬虫实战·零基础python爬虫教学·采集结果csv导出·旅游数据采集·携程/去哪儿酒店机票价格监控
2501_944934732 小时前
高职大数据技术专业,CDA和Python认证优先考哪个?
大数据·开发语言·python
helloworldandy2 小时前
使用Pandas进行数据分析:从数据清洗到可视化
jvm·数据库·python
yunfuuwqi3 小时前
OpenClaw✅真·喂饭级教程:2026年OpenClaw(原Moltbot)一键部署+接入飞书最佳实践
运维·服务器·网络·人工智能·飞书·京东云