V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
bwangel
V2EX  ›  Jupyter

Supervisor 无法停止 Jupyter Notebook

  •  
  •   bwangel · Mar 31, 2016 · 9203 views
    This topic created in 3681 days ago, the information mentioned may be changed or developed.

    最近在玩 Jupyter Notebook ,想用这个来写学习 Python 的笔记!打算通过 Supervisor 来管理 Jupyter Notebook ,再加上一个 Nginx 进行反向代理(略显无聊,纯粹为了好玩)。

    结果现在卡在 Supervisor 管理 Jupyter Notebook 上了。废话少说,贴代码:

    相关配置

    Supervisor 的配置

    # 这分别是 supervisord 和 Jupyter 程序的配置
    [supervisord]
    logfile=/home/supervisord/supervisord.log ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10           ; (num of main logfile rotation backups;default 10)
    loglevel=info                ; (log level;default info; others: debug,warn,trace)
    pidfile=/home/supervisord/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    nodaemon=false               ; (start in foreground if true;default false)
    minfds=1024                  ; (min. avail startup file descriptors;default 1024)
    minprocs=200                 ; (min. avail process descriptors;default 200)
    ;umask=022                   ; (process file creation umask;default 022)
    ;user=chrism                 ; (default is current user, required if root)
    ;identifier=supervisor       ; (supervisord identifier, default is 'supervisor')
    ;directory=/tmp              ; (default is not to cd during start)
    ;nocleanup=true              ; (don't clean up tempfiles at start;default false)
    ;childlogdir=/tmp            ; ('AUTO' child log dir, default $TEMP)
    ;environment=KEY="value"     ; (key value pairs to add to environment)
    ;strip_ansi=false            ; (strip ansi escape codes in logs; def. false)
    
    [program:jupyter-notebook]
    user=xff
    command=bash /home/xff/bin/start_notebook.sh
    process_name=ipython_notebook
    environment=HOME="/home/xff/"
    numprocs=1
    numprocs_start=3
    direcotory=/home/xff/Documents
    stdout_logfile=/home/supervisord/jupyter-notebook.log        ; stdout log path, NONE for none; default AUTO
    stdout_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
    stdout_logfile_backups=10     ; # of stdout logfile backups (default 10)
    stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
    stdout_events_enabled=false   ; emit events on stdout writes (default false)
    stderr_logfile=/home/supervisord/jupyter-notebook.err        ; stderr log path, NONE for none; default AUTO
    stderr_logfile_maxbytes=1MB   ; max # logfile bytes b4 rotation (default 50MB)
    stderr_logfile_backups=10     ; # of stderr logfile backups (default 10)
    stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
    stderr_events_enabled=false   ; emit events on stderr writes (default false)
    stopsignal=KILL
    stopwaitsecs=5
    ;autostart=true
    ;autorestart=true
    

    Jupyter Notebook 的启动脚本

    # /home/xff/bin/start_notebook.sh 文件, Jupyter Notebook 的启动脚本
    #!/bin/bash
    NOTEBOOK_CMD="/home/xff/.virtualenvs/jupyter/bin/jupyter-notebook --config=/home/xff/.jupyter/jupyter_notebook_config.py"
    echo $NOTEBOOK_CMD >> /home/xff/log
    $NOTEBOOK_CMD
    

    错误情况

    通过 supervisorctl 启动 Jupyter Notebook 后,进程树是这样的:

    root       5004  0.0  1.3 207632 13264 ?        Ss   16:51   0:00 /usr/local/Python-2.7.11/bin/python2.7 /usr/local/Python-2.7.11/bin/supervisord -c /etc/supervisord.conf --user=root
    xff        5142  0.1  0.1 106100  1220 ?        S    17:00   0:00  \_ bash /home/xff/bin/start_notebook.sh
    xff        5143  7.8  3.4 286876 35104 ?        S    17:00   0:00      \_ /home/xff/.virtualenvs/jupyter/bin/python2.7 /home/xff/.virtualenvs/jupyter/bin/jupyter-notebook --config=/home/xff/.jupyter/jupyter_notebook_config.py
    

    在 supervisorctl 上停止 Jupyter Notebook 之后,进程树就变成这样了,

    root       3196  0.0  0.1  42708  1836 ?        Ss   15:33   0:00 nginx: master process nginx
    www        3728  0.0  0.2  43124  2196 ?        S    16:03   0:02  \_ nginx: worker process
    www        3729  0.0  0.2  43124  2196 ?        S    16:03   0:01  \_ nginx: worker process
    root       5004  0.0  1.3 207784 13336 ?        Ss   16:51   0:00 /usr/local/Python-2.7.11/bin/python2.7 /usr/local/Python-2.7.11/bin/supervisord -c /etc/supervisord.conf --user=root
    xff        5143  0.2  3.4 286876 35104 ?        S    17:00   0:00 /home/xff/.virtualenvs/jupyter/bin/python2.7 /home/xff/.virtualenvs/jupyter/bin/jupyter-notebook --config=/home/xff/.jupyter/jupyter_notebook_config.py
    

    很明显, Jupyter Notebook 的进程并没有被停止,它变成了孤儿进程,被 Init 收养了。

    我开始以为是 supervisor 发送的停止信号不对,后来吧 supervisor 配置文件中,程序的停止信号stopsignal变成了kill还是不行,但如果我在命令行中执行

    # Jupyter Notebook 默认监听的是 8888 端口
    kill -9 `lsof -ti:8888`
    

    是可以的!

    万能的 V 友们,给点提示吧,这是什么原因啊,从哪里入手解决呀!

    5 replies    2016-04-01 07:32:56 +08:00
    bwangel
        1
    bwangel  
    OP
       Mar 31, 2016
    刚刚配置好了 Nginx 对 Jupyter Notebook 的反向代理, Nginx 还需要设置上对于 WebSocket 的支持( Jupyter Notebook 的 Python Notebook 还用到了 WebSocket 。。)。

    我在朋友的帮助下,找到了这篇文章 https://www.nginx.com/blog/websocket-nginx/,解决了 WebSocket 的配置。

    还有这个文章 http://www.jianshu.com/p/4ecdc166f968 ,是我的一点小笔记。。
    bwangel
        2
    bwangel  
    OP
       Mar 31, 2016
    不过 Supervisor 的问题还是没有解决。。
    bwangel
        3
    bwangel  
    OP
       Mar 31, 2016
    @bwangel 坑爹啊,文件链接错误。。

    参考文章是这个:

    https://www.nginx.com/blog/websocket-nginx/
    fcicq
        4
    fcicq  
       Apr 1, 2016   ❤️ 1
    bash 里面用 exec 来替换 shell 进程. 也就是你脚本最后一句应该是 exec $NOTEBOOK_CMD. 楼主如果用 runit 来抄脚本的话就不会错了.
    bwangel
        5
    bwangel  
    OP
       Apr 1, 2016
    @fcicq 好吧,懂了!

    原来只是停止了 Bash 进程, Jupyter 没有被停止,成了孤儿进程,被收养了。。

    谢谢谢谢,这么久解决了,你这么一说,突然秒懂了!
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   1052 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 37ms · UTC 22:42 · PVG 06:42 · LAX 15:42 · JFK 18:42
    ♥ Do have faith in what you're doing.