在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境

目录

  • [在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境](#在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境)
    • [**1. 使用 Systemd 服务单元(推荐)**](#1. 使用 Systemd 服务单元(推荐))
      • [**1.1 创建服务单元文件**](#1.1 创建服务单元文件)
      • [**1.2 配置服务内容**](#1.2 配置服务内容)
      • [**1.3 参数说明**](#1.3 参数说明)
      • [**1.4 重新加载并启用服务**](#1.4 重新加载并启用服务)
      • [**1.5 验证服务**](#1.5 验证服务)
    • [**2. 使用 init.d 脚本(兼容旧系统)**](#2. 使用 init.d 脚本(兼容旧系统))
      • [**2.1 创建 init.d 脚本**](#2.1 创建 init.d 脚本)
      • [**2.2 添加内容**](#2.2 添加内容)
      • [**2.3 设置权限并启用服务**](#2.3 设置权限并启用服务)
      • [**2.4 启动服务并验证**](#2.4 启动服务并验证)
    • [**3. 关键注意事项**](#3. 关键注意事项)
      • [**3.1 路径必须绝对**](#3.1 路径必须绝对)
      • [**3.2 环境变量问题**](#3.2 环境变量问题)
      • [**3.3 权限问题**](#3.3 权限问题)
      • [**3.4 日志调试**](#3.4 日志调试)
    • [**4. 示例:验证 Anaconda 环境激活的脚本**](#4. 示例:验证 Anaconda 环境激活的脚本)
      • [**4.1 创建测试脚本 `test_script.sh`**](#4.1 创建测试脚本 test_script.sh)
      • [**4.2 修改 service 文件或 init.d 脚本**,指向此测试脚本。](#4.2 修改 service 文件或 init.d 脚本,指向此测试脚本。)
      • [**4.3 验证输出**](#4.3 验证输出)
    • [**5. 总结**](#5. 总结)

在 Ubuntu 中配置开机自启动脚本并激活 Anaconda 环境

在 Ubuntu 系统中,配置开机自启动脚本并激活 Anaconda 环境是许多开发者和数据科学家的常见需求。本文将详细介绍如何通过 systemd 服务单元init.d 脚本 实现这一目标,并解决在非交互式 shell 中激活 Anaconda 环境时可能遇到的问题。


1. 使用 Systemd 服务单元(推荐)

1.1 创建服务单元文件

首先,创建一个 systemd 服务单元文件:

bash 复制代码
sudo nano /etc/systemd/system/your-service-name.service

1.2 配置服务内容

在文件中填写以下内容(根据实际情况调整):

ini 复制代码
[Unit]
Description=启动我的服务并激活 Anaconda 环境
After=network.target

[Service]
# 指定运行脚本的用户
User=your-username
# 启动脚本
ExecStart=/usr/bin/bash -c 'source /home/your-username/anaconda3/etc/profile.d/conda.sh && conda activate your-env-name && /path/to/your_script.py'
# 失败时重启服务
Restart=on-failure

[Install]
WantedBy=multi-user.target

1.3 参数说明

  • User=your-username:替换为你的用户名。
  • ExecStart
    • source /home/your-username/anaconda3/etc/profile.d/conda.sh:手动加载 Conda 的环境变量。
    • conda activate your-env-name:激活指定的 Anaconda 环境。
    • /path/to/your_script.py:替换为你的脚本路径。

1.4 重新加载并启用服务

bash 复制代码
sudo systemctl daemon-reload
sudo systemctl enable your-service-name.service
sudo systemctl start your-service-name.service

1.5 验证服务

bash 复制代码
systemctl status your-service-name.service
journalctl -u your-service-name.service --since "1 minute ago"

2. 使用 init.d 脚本(兼容旧系统)

2.1 创建 init.d 脚本

bash 复制代码
sudo nano /etc/init.d/your-script-name

2.2 添加内容

bash 复制代码
#!/bin/sh
### BEGIN INIT INFO
# Provides:          your-script-name
# Required-Start:    $remote_fs $syslog
# Required-Stop:     $remote_fs $syslog
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
# Short-Description: 启动并激活 Anaconda 环境的脚本
### END INIT INFO

case "$1" in
  start)
    echo "启动服务..."
    /bin/bash -c 'source /home/your-username/anaconda3/etc/profile.d/conda.sh && conda activate your-env-name && /path/to/your_script.py &' &
    ;;
  stop)
    echo "停止服务..."
    pkill -f your_script.py
    ;;
  restart)
    $0 stop
    $0 start
    ;;
  *)
    echo "使用: {start|stop|restart}"
    exit 1
    ;;
esac

exit 0

2.3 设置权限并启用服务

bash 复制代码
sudo chmod +x /etc/init.d/your-script-name
sudo update-rc.d your-script-name defaults

2.4 启动服务并验证

bash 复制代码
sudo /etc/init.d/your-script-name start
tail -f /var/log/syslog  # 查看系统日志

3. 关键注意事项

3.1 路径必须绝对

  • Anaconda 安装路径通常是用户的家目录下的 anaconda3miniconda3(例如 /home/your-username/anaconda3)。
  • 脚本路径需使用绝对路径(如 /home/your-username/script.py)。

3.2 环境变量问题

在非交互式 shell 中,conda activate 不会自动加载环境变量,因此必须手动 source conda.sh。例如:

bash 复制代码
#!/bin/bash
source /home/your-username/anaconda3/etc/profile.d/conda.sh
conda activate your-env-name
python your_script.py

3.3 权限问题

  • 确保服务以正确用户身份运行(通过 User=your-username 或脚本的 sudo -u)。

  • 确保脚本有执行权限:

    bash 复制代码
    chmod +x /path/to/your_script.py

3.4 日志调试

向脚本添加日志输出,例如:

bash 复制代码
echo "正在激活环境..." >> /tmp/my_script.log
echo "当前环境变量:" >> /tmp/my_script.log
env >> /tmp/my_script.log

4. 示例:验证 Anaconda 环境激活的脚本

4.1 创建测试脚本 test_script.sh

bash 复制代码
#!/bin/bash
source /home/your-username/anaconda3/etc/profile.d/conda.sh
conda activate your-env-name
echo "当前激活的环境:" $(conda info --envs | grep "*" | awk '{print $NF}') >> /tmp/test.log
echo "Python 版本:" >> /tmp/test.log
python --version >> /tmp/test.log

4.2 修改 service 文件或 init.d 脚本,指向此测试脚本。

4.3 验证输出

bash 复制代码
tail -f /tmp/test.log

5. 总结

通过以上步骤,你可以在 Ubuntu 的开机自启动脚本中正确激活并使用 Anaconda 环境。如果遇到权限或路径问题,请仔细检查日志并确保所有路径均为绝对路径。希望本文能帮助你轻松实现这一需求!

相关推荐
Dovis(誓平步青云)6 小时前
《如何在CentOS 7中添加Plex官方软件源:解决文件磁盘难管理难题》
linux·运维·服务器·后端·生成对抗网络·centos
草莓熊Lotso6 小时前
【Linux网络】深入理解Linux IO多路复用:select服务器完善、内核原理与poll实战
linux·运维·服务器·c语言·网络·c++
byte轻骑兵6 小时前
BlueZ源码编译环境配置全指南:Linux桌面原生编译 + 嵌入式ARM交叉编译 + 定制裁剪与调试实战
linux·arm开发·蓝牙·bluez·电脑蓝牙
纪伊路上盛名在7 小时前
NVML ERROR_ RM has detected an NVML_RM version mismatch
linux·数据库·gpu·驱动
醉逍遥_祥7 小时前
Linux进程与NuttX任务(Linux Processes vs NuttX Tasks)
linux·单片机·嵌入式软件
网安老伯7 小时前
网络安全基础要点知识介绍(非常详细),零基础入门到精通,看这一篇就够了
运维·前端·网络协议·web安全·网络安全·职场和发展
迷茫中的自我7 小时前
GitHub Actions自动化运维实战:从CI/CD到云原生部署
运维·自动化·github
XH华7 小时前
Linux系统第二章:常见的Linux指令(上)
linux·运维·服务器
nVisual7 小时前
01-环境监控集成方案
运维·服务器·开发语言·网络·数据库·数据中心布线·综合布线管理软件
北龙云海16 小时前
案例分享 | 面向公网业务系统境内访问白名单配置实操方案
运维·网络·安全·网络安全·告警·数据泄露·入侵攻击