为了让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

虚拟环境上的jupyterhub开机启动设置的更多相关文章

  1. 【CentOS】centos7上查看服务开机启动列表

    centos7上查看服务开机启动列表 命令: systemctl list-unit-files; 点击回车,可以向下翻页查询

  2. Tomcat开机启动设置

    omcat开机启动设置 1.修改/etc/rc.d/rc.local,使用vi /etc/rc.d/rc.local 命令2.在/etc/rc.d/rc.local文件最后添加下面两行脚本 expor ...

  3. ubuntu 14 中tomcat的开机启动设置

    开机自启动,将要执行的语句写入/etc/rc.local. #!/bin/sh -e # # rc.local # # This script is executed at the end of ea ...

  4. CenterOS中安装Redis及开机启动设置

    Redis安装 从官方下载最新Redis进行安装,官网地址:http://redis.io/download $ wget http://download.redis.io/releases/redi ...

  5. centos 7 上配置mysql 开机启动详解

    之前多次在centos7环境下配置mysql开机自启动出现了错误.现留下篇文章已做记录 一.centos7与centos6相比有什么不同: 1 在centos7中服务不在是用service这个命令来启 ...

  6. linux 开机启动设置

    操作系统:Ubuntu12.04硬件环境:HP CQ45        当用户使用sudo apt-get install安装完apache和mysql之后,这些服务默认是开机启动的,但是有的时候需要 ...

  7. Nginx+Center OS 7.2 开机启动设置(转载)

    centos 7以上是用Systemd进行系统初始化的,Systemd 是 Linux 系统中最新的初始化系统(init),它主要的设计目标是克服 sysvinit 固有的缺点,提高系统的启动速度.关 ...

  8. OneDrive 开机启动设置失效如何处理?

    问题现象: 『设置里勾选了开机启动onedrive,但是重启电脑勾选就没了,重新勾选没用,一重启就没了』 win10的onedrive无法开机启动 - Microsoft Community 处理方式 ...

  9. [ 手记 ] 关于tomcat开机启动设置问题

    今天尝试将tomcat设置为开机启动,大家都知道只需要将启动脚本添加到/etc/rc.local下面开机就会自动执行. /usr/local/tomcat8./bin/startup.sh >& ...

随机推荐

  1. Delphi - ShellExecute资料

    Windows官方资料: https://docs.microsoft.com/en-us/windows/win32/api/shellapi/nf-shellapi-shellexecutea#p ...

  2. io详解

    1.io类

  3. PHP的SPL标准库

    1,简介 SPL,全称 Standard PHP Library 中文是 标准PHP类库.是php内置的一些拓展类和拓展接口,其内容包含数据结构.迭代器.接口.异常.SPL函数,文件处理等内容.SPL ...

  4. 微博api接口登陆,获取信息,分享微博

    import json from datetime import datetime import MySQLdb import requests from flask import Flask, re ...

  5. springboot 单元测试 指定启动类

    问题 在做单元测试时,写了一个工具类,用于注入spring的上下文. public class AppBeanUtil implements ApplicationContextAware { pri ...

  6. LINUX基础学习之基础命令(2)--2019-11-18

    1.ls  :命令(list):列出指定目录下的内容 用法:ls [选项] [文件名...] [root@Redhat-7-43 ~]# which ls alias ls='ls --color=a ...

  7. 分享一个批量修改文件编码的python脚本

    分享一个自己编写的递归查找子目录,将所有cpp文件编码修改为utf-8编码格式的小脚本 #i!/usr/bin/env python3 # -*- coding:utf-8 -*- import os ...

  8. python基础语法14 面向对象

    面向对象 1.什么是面向对象? 面向对象是一门编程思想! - 面向过程编程思想: 核心是 “过程” 二字,过程指的是解决问题的步骤,即先干什么再干什么! 基于该编程思想编写程序,就好比在设计一条工厂流 ...

  9. Mysql建表通用写法

    Mysql建表通用写法 CREATE TABLE IF NOT EXISTS stu( id ) PRIMARY KEY AUTO_INCREMENT,//主键 自增 stuname ) NOT NU ...

  10. matlab基础向1-6:基础语法

    1.软件中如何运行代码? 命令行直接写代码,回车执行,也可以在文件里编写代码,比如有文件hello.m,点击“Run”直接运行或者在命令行窗口里输入“hello+回车”运行. 2.清空命令行 clc+ ...