zoukankan      html  css  js  c++  java
  • 虚拟环境上的jupyterhub开机启动设置

    为了让jupyterhub 开机启动,或者以服务的方式启动,折腾了好久。
    环境

    ubuntu 16.04
    anaconda >= 4.5
    python35
    jupyterhub 0.9.4
    node 6.14.4
    背景
    jupyterhub 安装在 conda的虚拟环境中 只有进入该虚拟环境中才能执行jupyterhub命令
    建立的脚本可以启动jupyterhub
    #!/bin/bash -l
    conda activate python35
    cd /etc/jupyterhub
    jupyterhub -f /etc/jupyterhub/jupyterhub_config.py >> /etc/jupyterhub/jupyter.log
    bash 一定要加-l 目的是以login shell 的方式登录,否则系统可能无法识别conda命令,因为conda4.4后的版本将命令的配置放到了/etc/profile.d/conda.sh中,只有login shell登录的时候才会执行该文件,系统才会识别到conda命令。大家可能会比较疑惑,为什么用conda activate而不用source activate 这样是不行的,因为我们要放到开机启动项或者服务启动项中,这两种方法识别到的source 是linux系统的source,就是用来更新文件状态的那个命令,通常我们更改系统的配置文件比如/etc/profile /etc/bash.bashrc后用source命令更新,所以在开机启动或者启动服务的时候bash 将source 识别成这个更新文件的命令,导致出错

    问题
    每次启动的上面的脚本时需要用./name.sh或者 bash name.sh来执行,且当我们关掉自己的命令行时jupyterhub服务也就会关掉,也就是没办法后台运行。
    解决方案
    将上面的脚本文件作为开机启动项,让其开机自起(只有重启机器才会生效)
    将上面的脚本作为服务(类似于 ssh server),可以通过service或systemctl等服务管理命令控制(不必重启机器,灵活,可控)
    加入到开机启动项中
    参考链接原理比较详细的链接 只要脚本没问题,即可执行,但问题是脚本一旦有问题,服务就不会被启动,且我们也不知道出错在哪。比如说,我们不知道该脚本执行的顺序是在加载用户配置之前还是之后执行,如果在用户配置PATH等配置之前就执行,那么用户的某些命令就无法执行比如conda, node configurable-http-proxy这三个命令都和jupyterhub相关,如果我们写的脚本在加载用户配置之前就执行,肯定是不行的,所以我们尽量不采用这种方法

    写到服务中
    我们的机器是ubuntu 16.04可以中systemctl管理服务

    在/etc/systemd/system/下建立一个名为jupyterhub.service的服务配置文件,名字是jupyterhub后缀是.service,名字可以自己随便命名,该名字就是以后用systemctl 或 service配置的服务名
    在jupyterhub.service文件中写入下面的命令
    # Default-Start: 2 3 4 5
    # Default-Stop: 0 1 6
    [Unit]
    Description=jupyterhub (随便起个名字)
    After=syslog.target network.target (在网络服务启动后启动该脚本)
    [Service]
    User=root
    ExecStart=/etc/jupyterhub/jupyterhub.sh (脚本地址)
    [Install]
    WantedBy=default.target
    上面的配置是系统服务配置文件最简单的写法改一下就可以了。

    在终端中执行 systemctl start jupyterhub 启动服务
    查看服务运行状态 systemctl status jupyterhub
    通常会出错
    如果提示 node configurable-http-proxy 错误,找不到文件等等,那原因就是服务的优先级在系统配置之前,也就是我们配置的node的PATH没有被识别,所以我最终将node的PATH配置放到了/etc/profile中成功了,之前放到了/etc/bash.bashrc中并不能识别
    服务可以成功启动,执行systemctl enable jupyterhub允许开机自启动
    以上就是走过的坑,希望大家在和我一样的环境下能避免这些坑。
    ————————————————
    版权声明:本文为CSDN博主「小猪嘎嘎」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/luoluonuoyasuolong/article/details/88815887

  • 相关阅读:
    MySQL常用命令
    Jstack、Jmap命令简单使用
    MySQL慢查询日志ES索引模板
    MySQL二进制安装部署
    varnish启动报错
    基础训练 Sine之舞
    基础训练 FJ的字符串
    基础训练 芯片测试
    基础训练 龟兔赛跑预测
    基础训练 回形取数
  • 原文地址:https://www.cnblogs.com/adolfmc/p/11980161.html
Copyright © 2011-2022 走看看