zoukankan      html  css  js  c++  java
  • Linux安装部署进程管理工具 supervisor.

    部署任务上线,一直用nohup肯定是不行的,作为不专业的运维起码要会用一些进程管理工具,这次我用的是Python开发的supervisor【话说给我几个月,我也能开发出来。。。】

    这是github的地址:https://github.com/Supervisor/supervisor

    这是官方的使用介绍::http://supervisord.org/

    下面我写一些自己的简单记录,方便我以后使用,参考链接就不上了,百度出来的,基本比较杂乱。

    首先本人是通过pip install supervisor的方式进行安装,非通过yum或apt安装,但具体使用差不多。

    装好以后可以使用命令:echo_supervisord_conf如果有一堆配置信息输出,这就正确了。

    这个里面有所有的服务器以及任务的相关配置。

    插入一下,supervisor有两个可执行的Python文件

    /root/anaconda3/bin/supervisord     这个是启动文件

    /root/anaconda3/bin/supervisorctl    这个是控制文件

     

    需要通过echo_supervisord_conf的输出,导出到指定的/etc/supervisord.conf下面,其实导出到哪里都可以,这是给supervisord使用的配置文件。

    这里务必要注意修改里面的

    [include]

    files = supervisord.d/*.conf

    这个是启动supervisor后,管理子进程配置文件的地方,文件的后缀名随便你,网上有conf或者ini无所谓。

    配置文件网上有很多,也可以直接参考echo_supervisord_conf的输出情况。

     

    配置好,就可以通过supervisord -c /etc/supervisord.conf运行改进程。

     

    常用supervisorctl命令

    supervisorctl status    查看当期进程状态
    supervisorctl stop <name>  停止一个进程
    supervisorctl start <name>  启动
    supervisorctl restart <name> 重启
    supervisorctl reload     重启supervisord主进程

     

    supervisorctl 常用命令

    查看任务状态:supervisorctl status

    启动任务:supervisorctl start <name>

    停止任务:supervisorctl stop <name>

    重启任务:supervisorctl restart <name>

    清除日志文件:supervisorctl  clear <name>

    清除多个日志文件:supervisorctl  clear <name> <name> 

    清除所有日志文件:supervisorctl  clear all 

    移除任务:supervisorctl  remove <name>

    下面是我复制百度上面相关信息,开机自动启动supervisord的操作

    在目录/usr/lib/systemd/system/ 新建文件supervisord.service,并添加配置内容

    [Unit]
    Description=Process Monitoring and Control Daemon
    After=rc-local.service nss-user-lookup.target
    
    [Service]
    Type=forking
    ExecStart=/usr/bin/supervisord -c /usr/supervisor/supervisord.conf ;开机启动时执行
    ExecStop=/usr/bin/supervisord shutdown ; 这里面我都进行了修改
    ExecReload=/usr/bin/supervisord reload  ; 根据自身情况修改
    killMode=process
    Restart=on-failure
    RestartSec=42s
    
    [Install]
    WantedBy=multi-user.target

    启动服务:systemctl enable supervisord

    验证是否开机启动:systemctl is-enabled supervisord

    配置文件,参考的链接:https://www.cnblogs.com/toutou/p/supervisor.html

    3.2 增加一个配置文件,以便supervisor用来监控程序

    cat > /usr/supervisor/supervisord.d/supervisor_test_one.conf

    在新建的supervisor_test_one.conf文件中添加以下配置

    复制代码
    [program:test_one]
    command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestOne  ; 被监控的进程路径
    priority=1                    ; 数字越高,优先级越高
    numprocs=1                    ; 启动几个进程
    autostart=true                ; 随着supervisord的启动而启动
    autorestart=true              ; 自动重启
    startretries=10               ; 启动失败时的最多重试次数
    exitcodes=0                   ; 正常退出代码
    stopsignal=KILL               ; 用来杀死进程的信号
    stopwaitsecs=10               ; 发送SIGKILL前的等待时间
    redirect_stderr=true          ; 重定向stderr到stdout
    
    [program:test_two]
    command=java -jar /data/smallvideo/supervisor/taskApp-exec.jar TaskTestTwo   ; 被监控的进程路径
    priority=1                    ; 数字越高,优先级越高
    numprocs=1                    ; 启动几个进程
    autostart=true                ; 随着supervisord的启动而启动
    autorestart=true              ; 自动重启
    startretries=10               ; 启动失败时的最多重试次数
    exitcodes=0                   ; 正常退出代码
    stopsignal=KILL               ; 用来杀死进程的信号
    stopwaitsecs=10               ; 发送SIGKILL前的等待时间
    redirect_stderr=true          ; 重定向stderr到stdout
    复制代码

    3.3 supervisor配置文件详解

    详解Supervisor进程守护监控
    复制代码
    - command:启动程序使用的命令,可以是绝对路径或者相对路径
    - process_name:一个python字符串表达式,用来表示supervisor进程启动的这个的名称,默认值是%(program_name)s
    - numprocs:Supervisor启动这个程序的多个实例,如果numprocs>1,则process_name的表达式必须包含%(process_num)s,默认是1
    - numprocs_start:一个int偏移值,当启动实例的时候用来计算numprocs的值
    - priority:权重,可以控制程序启动和关闭时的顺序,权重越低:越早启动,越晚关闭。默认值是999
    - autostart:如果设置为true,当supervisord启动的时候,进程会自动重启。
    - autorestart:值可以是false、true、unexpected。false:进程不会自动重启,unexpected:当程序退出时的退出码不是exitcodes中定义的时,进程会重启,true:进程会无条件重启当退出的时候。
    - startsecs:程序启动后等待多长时间后才认为程序启动成功
    - startretries:supervisord尝试启动一个程序时尝试的次数。默认是3
    - exitcodes:一个预期的退出返回码,默认是0,2。
    - stopsignal:当收到stop请求的时候,发送信号给程序,默认是TERM信号,也可以是 HUP, INT, QUIT, KILL, USR1, or USR2。
    - stopwaitsecs:在操作系统给supervisord发送SIGCHILD信号时等待的时间
    - stopasgroup:如果设置为true,则会使supervisor发送停止信号到整个进程组
    - killasgroup:如果设置为true,则在给程序发送SIGKILL信号的时候,会发送到整个进程组,它的子进程也会受到影响。
    - user:如果supervisord以root运行,则会使用这个设置用户启动子程序
    - redirect_stderr:如果设置为true,进程则会把标准错误输出到supervisord后台的标准输出文件描述符。
    - stdout_logfile:把进程的标准输出写入文件中,如果stdout_logfile没有设置或者设置为AUTO,则supervisor会自动选择一个文件位置。
    - stdout_logfile_maxbytes:标准输出log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
    - stdout_logfile_backups:标准输出日志轮转备份的数量,默认是10,如果设置为0,则不备份
    - stdout_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
    - stdout_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
    - stderr_logfile:把进程的错误日志输出一个文件中,除非redirect_stderr参数被设置为true
    - stderr_logfile_maxbytes:错误log文件达到多少后自动进行轮转,单位是KB、MB、GB。如果设置为0则表示不限制日志文件大小
    - stderr_logfile_backups:错误日志轮转备份的数量,默认是10,如果设置为0,则不备份
    - stderr_capture_maxbytes:当进程处于stderr capture mode模式的时候,写入FIFO队列的最大bytes值,单位可以是KB、MB、GB
    - stderr_events_enabled:如果设置为true,当进程在写它的stderr到文件描述符的时候,PROCESS_LOG_STDERR事件会被触发
    - environment:一个k/v对的list列表
    - directory:supervisord在生成子进程的时候会切换到该目录
    - umask:设置进程的umask
    - serverurl:是否允许子进程和内部的HTTP服务通讯,如果设置为AUTO,supervisor会自动的构造一个url
    复制代码

    监控demotest程序示例:

    复制代码
    [program:demotest]
    command=python demotest.py 10000  ; 被监控的进程启动命令
    directory=/root/                ; 执行前要不要先cd到目录去,一般不用
    priority=1                    ;数字越高,优先级越高
    numprocs=1                    ; 启动几个进程
    autostart=true                ; 随着supervisord的启动而启动
    autorestart=true              ; 自动重启。。当然要选上了
    startretries=10               ; 启动失败时的最多重试次数
    exitcodes=0                   ; 正常退出代码(是说退出代码是这个时就不再重启了吗?待确定)
    stopsignal=KILL               ; 用来杀死进程的信号
    stopwaitsecs=10               ; 发送SIGKILL前的等待时间
    redirect_stderr=true          ; 重定向stderr到stdout
  • 相关阅读:
    利用CWinThread实现跨线程父子MFC窗口
    GetForgroundWindow函数的不确定性——BUG笔记
    DLL动态链接库的创建
    php正则讲解 及与 js的正则比较
    cookie和session的讲解
    两种排序的方法 冒泡法 插入法 封装版
    php中获取当前时间
    文件下载及header方法介绍
    文件上传
    二分法封装版
  • 原文地址:https://www.cnblogs.com/sidianok/p/14627596.html
Copyright © 2011-2022 走看看