• 使用supervisor来启动管理服务


    supervisor 使用方法

    supervisor(官网)是一个unix的系统进程管理软件,可以用它来管理apache、nginx等服务,
    若服务挂了可以让它们自动重启。当然也可以用来实现golang的守护进程.

    学完这篇教程后,我们希望达到如下的目标:

    • 服务挂掉后,自动重启
    • 可执行文件或者配置文件修改后,服务自动重启

    让我们开始吧!

    1.supervisor安装

    1.以上tar包任意目录解压

    # ubuntu安装:
    sudo apt-get install supervisor 
    # centos安装
    yum install -y supervisor 
    # 基于python库安装
    pip2 install supervisor
    easy_install supervisor
    

    安装好之后,不出问题的话supervisor服务已经启动完成。

    查看进程是否启动成功

    pgrep supervisord
    

    出现进程号之后表面成功启动

    手动启动进程

    如果上一步没发现进程号,那么可以执行下面的命令

    supervisord -c  /etc/supervisor/supervisord.conf
    

    2.supervisor配置

    打开配置文件supervisord.conf

    # 配置文件一般在如下位置:
    > vim /etc/supervisor/supervisord.conf 
    

    我们可以看到文件的最后有这么一句话

    [include]
    files = /etc/supervisor/conf.d/*.conf
    

    也就是说配置文件会引入/etc/supervisor/conf.d/目录下所有conf后缀的文件.

    创建自定义的服务配置文件

    所以我们可以在/etc/supervisor/conf.d/下建立文件ipfs.conf

    注意: 日志路径不存在会启动失败! supervisor不会自己创建目录!

    ; 设置进程的名称,使用 supervisorctl 来管理进程时需要使用该进程名
    [program:ipfs] 
    directory = /usr/local/bin            ; 程序的启动目录
    command=/usr/local/bin/ipfs daemon    ; 启动命令 最好绝对路径
    autostart = true                      ; 在 supervisord 启动的时候也自动启动
    numprocs=1                            ; 默认为1
    process_name=%(program_name)s         ; 默认为 %(program_name)s,即 [program:x] 中的 x
    user=root                             ; 使用 root 用户来启动该进程
    autorestart=true                      ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次
    redirect_stderr=true                  ; 重定向输出的日志
    stdout_logfile = /var/log/supervisord/tornado_server.log
    loglevel=info
    

    配置文件中的注释以;打头

    保存配置文件,重启

    > supervisorctl reload
    

    3.supervisor常用命令

    supervisor有supervisord和supervisorctl两种命令类型:

    • supervisord是服务相关的命令
    • supervisorctl是客户端相关的命令

    supervisor涉及的状态主要有

    • running:进程处于运行状态
    • starting:Supervisor 收到启动请求后,进程处于正在启动过程中
    • stopped:进程处于关闭状态
    • stopping:Supervisor 收到关闭请求后,进程处于正在关闭过程中
    • backoff:进程进入 starting 状态后,由于马上就退出导致没能进入 running 状态
    • fatal:进程没有正常启动
    • exited:进程从 running 状态退出

    常用的命令如下:

    #关闭所有任务
    supervisorctl shutdown 
    # 启动某个进程
    supervisorctl start programxxx
    # 重启某个进程
    supervisorctl restart programxxx
    # 停止全部进程 注:start、restart、stop都不会载入最新的配置文件
    supervisorctl stop all
    # 载入最新的配置文件,停止原有进程并按新的配置启动、管理所有进程。
    supervisorctl reload
    # 根据最新的配置文件,启动新配置或有改动的进程,配置没有改动的进程不会受影响而重启。
    supervisorctl update
    

    注意:显式用stop停止掉的进程,用reload或者update都不会自动重启

    4.自动侦测文件变化并重启服务

    4.可能遇到的错误

    无权限错误

    error: <class 'socket.error'>, [Errno 2] No such file or directory: 
    file: /usr/lib/python2.7/socket.py line: 228
    

    解决方案: 重启服务

    > supervisord -c /etc/supervisor/supervisord.conf 
    Error: The directory named as part of the path /var/log/supervisor/archive/info.log    does not exist. in section 'program:archive' (file: '/etc/supervisor/conf.d/archive.conf')
    For help, use /usr/bin/supervisord -h
    

    或者可能是supervisor服务未启动

    > service  supervisor  start 
    

    配置命令错误

    参考链接: supervisorctl always reports error: ERROR (no such file)

    > sudo supervisorctl start archive
    archive: ERROR (no such file)
    

    执行下面命令发现报错

    > sudo supervisorctl status
    archive                          FATAL     can't find command './archive'
    

    说明supervisor无法解析该指令

    解决方法:配置文件执行指令补全

    [program:archive]   
    # 改变前:
    command=archive          
    # 改变后:                         
    command=/opt/deploy/archive/archive          
    ...
  • 相关阅读:
    HTML5 jQuery图片上传前预览
    【Web前沿技术】纯 CSS3 打造的10个精美加载进度条动画
    20个非常绚丽的 CSS3 特性应用演示
    C#.NET开源项目、机器学习、商务智能
    SqlServer中decimal(numeric )、float 和 real 数据类型的区别[转]
    asp.net Session
    Entity Framework 5.0系列之自动生成Code First代码
    关于Memcache mutex设计模式的.net实现
    Discuz!NT中的Redis架构设计
    使用ServiceStackRedis链接Redis简介
  • 原文地址:https://www.cnblogs.com/kylin5201314/p/16371209.html
Copyright © 2020-2023  润新知