如何在服务器后台运行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位系统):

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

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

    wget https://repo.anaconda.com/miniconda/Miniconda3-latest-MacOSX-arm64.sh
    

2. 安装Miniconda

运行以下命令安装Miniconda:

bash Miniconda3-latest-Linux-x86_64.sh

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

source ~/miniconda3/etc/profile.d/conda.sh

3. 验证安装是否成功

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

conda --version

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


二、创建Conda虚拟环境

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

1. 创建虚拟环境

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

conda create -n test python=3.9 -y

2. 激活虚拟环境

激活test虚拟环境:

conda activate test

3. 安装依赖包

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

conda install numpy -y

4.编写测试脚本mian.py

import time
import datetimedef 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:

#!/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脚本,检查是否已有脚本运行、保存运行日志的功能:

#!/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"; thenecho "虚拟环境 $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; thenecho "检测到GPU环境,当前GPU信息如下:"nvidia-smi
elseecho "未检测到GPU,将使用CPU运行。"
fi# 4. 检查是否已有脚本实例在运行
# 假设需要运行的Python脚本名为main.py
PYTHON_SCRIPT="main.py"# 查找运行中的脚本进程
RUNNING_PID=$(pgrep -f "$PYTHON_SCRIPT" || echo "")if [ -n "$RUNNING_PID" ]; thenecho "检测到正在运行的脚本进程,PID:$RUNNING_PID,正在终止该进程..."kill -9 "$RUNNING_PID"echo "已终止进程 $RUNNING_PID。"
elseecho "未检测到正在运行的脚本,准备启动新任务。"
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; thenecho "当前的 GPU 使用情况如下:"nvidia-smi | grep python || echo "未检测到Python进程使用GPU。"
elseecho "无法检测GPU使用情况,请确认GPU配置是否正确。"
fi

四、运行脚本

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

1. 赋予执行权限

为脚本添加执行权限:

chmod +x start.sh

2. 启动脚本

运行脚本有两种方式:

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

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

    bash start.sh
    

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


五、检查脚本运行状态

1. 查看日志

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

tail -f output.log

2. 查看后台任务

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

ps -ef | grep main.py

3. 停止后台任务

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

kill <PID>

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


六、总结

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/79797.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

前端取经路——工程化渡劫:八戒的构建之道

大家好,我是老十三,一名前端开发工程师。前端工程化就像八戒的钉耙,看似简单却能降妖除魔。在本文中,我将带你探索前端工程化的九大难题,从模块化组织到CI/CD流程,从代码规范到自动化测试,揭示这些工具背后的核心原理。无论你是初学者还是资深工程师,这些构建之道都能帮…

Ubuntu 安装 Keepalived

Keepalived 是什么 Keepalived 是一个用于实现高可用性&#xff08;High Availability, HA&#xff09;的服务&#xff0c;是一款基于 VRRP 协议的高可用软件&#xff0c;常用于主备切换和虚拟IP漂移&#xff0c;在服务故障时自动实现故障转移。 Keepalived 的核心功能 功能说…

DHCP理解

文章目录 DHCP理解DHCP的核心作用DHCP默认端口DHCP的工作原理&#xff08;4个步骤&#xff09;图示说明&#xff08;含中继代理&#xff09;DHCP Discover&#xff08;客户端发现阶段&#xff09;DHCP Offer&#xff08;服务器提供阶段&#xff09;DHCP Request&#xff08;客户…

云计算-容器云-部署CICD-jenkins连接gitlab

安装 Jenkins 将Jenkins部署到default命名空间下。要求完成离线插件的安装,设置Jenkins的登录信息和授权策略。 上传BlueOcean.tar.gz包 [root@k8s-master-node1 ~]#tar -zxvf BlueOcean.tar.gz [root@k8s-master-node1 ~]#cd BlueOcean/images/ vim /etc/docker/daemon.json…

AI 大模型新浪潮:从 DeepSeek-Prover 到 Qwen3,再到 DeepSeek-R2,迈向自动推理的新时代20250507

&#x1f9e0; AI 大模型新浪潮&#xff1a;从 DeepSeek-Prover 到 Qwen3&#xff0c;再到 DeepSeek-R2&#xff0c;迈向自动推理的新时代 &#x1f680; 引言&#xff1a;大模型&#xff0c;不止是语言处理器&#xff0c;而是思维建构者 在 2025 年春天&#xff0c;我们见证了…

观察者模式(Observer Pattern)详解

文章目录 1. 什么是观察者模式?2. 为什么需要观察者模式?3. 观察者模式的核心概念4. 观察者模式的结构5. 观察者模式的基本实现简单的气象站示例6. 观察者模式的进阶实现推模型 vs 拉模型6.1 推模型(Push Model)6.2 拉模型(Pull Model)7. 观察者模式的复杂实现7.1 在线商…

前端代码规范详细配置

以下是现代前端项目的完整代码规范配置方案&#xff0c;涵盖主流技术栈和自动化工具链配置&#xff1a; 一、基础工程配置 1. 项目结构规范 project/ ├── src/ │ ├── assets/ # 静态资源 │ ├── components/ # 通用组件 │ ├── layouts/ …

Missashe考研日记-day34

Missashe考研日记-day34 1 专业课408 学习时间&#xff1a;3h学习内容&#xff1a; 今天是学习I/O管理第二小节的内容&#xff0c;听了课也做了题&#xff0c;这是操作系统倒数第二节知识了&#xff0c;还差最后一节就完结了。知识点回顾&#xff1a; 1.I/O核心子系统&#x…

Milvus 向量数据库详解与实践指南

一、Milvus 核心介绍 1. 什么是 Milvus&#xff1f; Milvus 是一款开源、高性能、可扩展的向量数据库&#xff0c;专门为海量向量数据的存储、索引和检索而设计。它支持近似最近邻搜索&#xff08;ANN&#xff09;&#xff0c;适用于图像检索、自然语言处理&#xff08;NLP&am…

算力经济模型研究:从云计算定价到去中心化算力市场设计

引言&#xff1a;算力商品化的双重革命 在H800 GPU集群的算力供给能力突破2.3 EFLOPS的今天&#xff0c;算力定价机制正经历从"资源租赁"到"动态市场"的范式转变。传统云计算定价模型&#xff08;如AWS按需实例&#xff09;的静态价格机制已难以适应大模型…

[D1,2] 贪心刷题

文章目录 摆动序列最大子数组合买卖股票跳跃游戏跳跃2 摆动序列 不像是贪心&#xff0c;只要抓住摆动这个点&#xff0c;前一个上升&#xff0c;那下一个就要下降&#xff0c;记录上一次的状态为1的话&#xff0c;那下一次就要更新为-1&#xff0c;如果上一次为1&#xff0c;这…

Spring Boot操作MongoDB的完整示例大全

以下是基于Spring Boot操作MongoDB的完整示例大全&#xff0c;涵盖增删改查、聚合查询、索引、事务等核心功能&#xff1a; 一、基础CRUD操作 1. 环境配置 依赖配置&#xff08;pom.xml&#xff09; <dependency><groupId>org.springframework.boot</groupId…

【实战教程】零基础搭建DeepSeek大模型聊天系统 - Spring Boot+React完整开发指南

&#x1f525; 本文详细讲解如何从零搭建一个完整的DeepSeek AI对话系统&#xff0c;包括Spring Boot后端和React前端&#xff0c;适合AI开发入门者快速上手。即使你是编程萌新&#xff0c;也能轻松搭建自己的AI助手&#xff01; &#x1f4da;博主匠心之作&#xff0c;强推专栏…

Linux系统基本指令和知识指南

一、Linux系统简介 Linux是一种自由和开放源代码的类UNIX操作系统&#xff0c;由林纳斯托瓦兹在1991年首次发布。它以稳定性、安全性和灵活性著称&#xff0c;广泛应用于服务器、嵌入式系统和个人计算机。 Linux主要特点&#xff1a; 开源免费 多用户、多任务 良好的安全性…

【计算机视觉】OpenCV实战项目:Long-Exposure:基于深度学习的长时间曝光合成技术

Long-Exposure&#xff1a;基于深度学习的长时间曝光合成技术 项目概述与技术背景项目核心功能技术原理 环境配置与安装硬件要求建议详细安装步骤可选组件安装 实战应用指南1. 基础使用&#xff1a;视频转长曝光2. 高级模式&#xff1a;自定义光轨合成3. 批量处理模式 技术实现…

TikTok 矩阵账号运营实操细节:打造爆款矩阵

在 TikTok 的流量版图里&#xff0c;打造 TikTok 矩阵账号能显著提升影响力与吸粉能力。而借助 AI 工具&#xff0c;更可为 TikTok 矩阵运营效率的提升赋能&#xff0c;让运营如虎添翼。下面就为大家详细讲讲其中的实操细节&#xff0c;并结合一些伪代码示例辅助理解。 一、矩…

互联网大厂Java求职面试:分布式系统中向量数据库与AI应用的融合探索

互联网大厂Java求职面试&#xff1a;分布式系统中向量数据库与AI应用的融合探索 面试开场&#xff1a;技术总监与郑薪苦的“较量” 技术总监&#xff08;以下简称T&#xff09;&#xff1a;郑薪苦先生&#xff0c;请简单介绍一下你在分布式系统设计方面的经验。 郑薪苦&…

【每日八股】学习 RocketMQ Day2:进阶(一)

文章目录 复习昨日内容为什么要使用消息队列为什么选择 RocketMQRocketMQ 的优缺点&#xff1f;谈谈你对 RocketMQ 的理解&#xff1f;消息队列有哪些类型&#xff1f;RocketMQ 采用哪种消息队列模型&#xff1f;消息的消费模式了解吗&#xff1f;了解 RocketMQ 的基本架构吗&a…

探索智能体开发新边界:Cangjie Magic开源平台体验与解析

文章目录 每日一句正能量前言一、Cangjie Magic的核心技术&#xff08;一&#xff09;Agent DSL架构&#xff08;二&#xff09;原生支持MCP通信协议&#xff08;三&#xff09;智能规划功能 二、实际应用场景&#xff08;一&#xff09;智能客服系统&#xff08;二&#xff09…

深入解析进程间通信与Socket原理:从理论到TypeScript实战

文章目录 一、进程中如何通信1.1 管道1.1.1 核心特性1.1.2 缺点1.1.3 匿名管道与命名管道的对比 1.2 信号1.2.1 核心特性1.2.2 缺点1.2.3 信号分类对比 1.3 消息队列1.3.1 核心特性1.3.2 缺点 1.4 共享内存1.4.1 核心特性1.4.2 缺点 1.5 信号量1.5.1 核心特性1.5.2 缺点 二、So…