supervisor program配置实例_weixin_33717298的博客-程序员宅基地

技术标签: python  shell  运维  

program 配置

上面我们已经把 supervisrod 运行起来了,现在可以添加我们要管理的进程的配置文件。可以把所有配置项都写到 supervisord.conf 文件里,但并不推荐这样做,而是通过 include 的方式把不同的程序(组)写到不同的配置文件里。

为了举例,我们新建一个目录 /etc/supervisor/ 用于存放这些配置文件,相应的,把 /etc/supervisord.conf 里 include 部分的的配置修改一下:

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

假设有个用 Python 和 Flask 框架编写的用户中心系统,取名 usercenter,用 gunicorn (http://gunicorn.org/) 做 web 服务器。项目代码位于 /home/leon/projects/usercenter,gunicorn 配置文件为gunicorn.py,WSGI callable 是 wsgi.py 里的 app 属性。所以直接在命令行启动的方式可能是这样的:

cd /home/leon/projects/usercenter
gunicorn -c gunicorn.py wsgi:app

现在编写一份配置文件来管理这个进程(需要注意:用 supervisord 管理时,gunicorn 的 daemon 选项需要设置为 False):

[program:usercenter]
directory = /home/leon/projects/usercenter ; 程序的启动目录
command = gunicorn -c gunicorn.py wsgi:app  ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动 startsecs = 5 ; 启动 5 秒后没有异常退出,就当作已经正常启动了 autorestart = true ; 程序异常退出后自动重启 startretries = 3 ; 启动失败自动重试次数,默认是 3 user = leon ; 用哪个用户启动 redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB stdout_logfile_backups = 20 ; stdout 日志文件备份数 ; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件) stdout_logfile = /data/logs/usercenter_stdout.log ; 可以通过 environment 来添加需要的环境变量,一种常见的用法是修改 PYTHONPATH ; environment=PYTHONPATH=$PYTHONPATH:/path/to/somewhere 

一份配置文件至少需要一个 [program:x] 部分的配置,来告诉 supervisord 需要管理那个进程。[program:x] 语法中的 x 表示 program name,会在客户端(supervisorctl 或 web 界面)显示,在 supervisorctl 中通过这个值来对程序进行 start、restart、stop 等操作。

使用 supervisorctl

Supervisorctl 是 supervisord 的一个命令行客户端工具,启动时需要指定与 supervisord 使用同一份配置文件,否则与 supervisord 一样按照顺序查找配置文件。

supervisorctl -c /etc/supervisord.conf

上面这个命令会进入 supervisorctl 的 shell 界面,然后可以执行不同的命令了:

> status    # 查看程序状态
> stop usercenter   # 关闭 usercenter 程序
> start usercenter  # 启动 usercenter 程序
> restart usercenter    # 重启 usercenter 程序
> reread    # 读取有更新(增加)的配置文件,不会启动新添加的程序
> update    # 重启配置文件修改过的程序

上面这些命令都有相应的输出,除了进入 supervisorctl 的 shell 界面,也可以直接在 bash 终端运行:

$ supervisorctl status
$ supervisorctl stop usercenter
$ supervisorctl start usercenter
$ supervisorctl restart usercenter
$ supervisorctl reread
$ supervisorctl update 

其它

除了 supervisorctl 之外,还可以配置 supervisrod 启动 web 管理界面,这个 web 后台使用 Basic Auth 的方式进行身份认证。

除了单个进程的控制,还可以配置 group,进行分组管理。

经常查看日志文件,包括 supervisord 的日志和各个 pragram 的日志文件,程序 crash 或抛出异常的信息一半会输出到 stderr,可以查看相应的日志文件来查找问题。

 

比如说,我现在启动一个我本机上的logstash

cd /etc/supervisord.d

vim logstash.conf

[program:logstash]
command=/opt/logstash/bin/logstash -f /opt/logstash/conf/zabbix.conf -l /opt/logstash/logs/zabbix.log
numprocs=1
autostart=true
autorestart=true
log_stdout=true
log_stderr=true

 

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/weixin_33717298/article/details/86393406

智能推荐

计算几何之 半平面交 代码模板及过程证明_harry1213812138的博客-程序员宅基地

半平面交定义首先要了解半平面交是什么,简单来讲,就是一堆直线,我们只取他的一边,所构成的区域就是半平面交。比如,有4条有向直线,我们都只取直线左边的那一部分,所有直线左边平面的交集就是半平面交。如下图所示,蓝色区域就是四条直线左边平面的交集:半平面交求法了解了什么是半平面交后,我们看一下他的求法。和求凸包一样,分为两步。第一步:将所有直线按倾角从小到大排序第二步:从小到大枚举每条边来维护一个双端队列。...

java8两个List集合取交集、并集、差集、去重并集_糖醋排骨Sugar的博客-程序员宅基地_java8 两个list取差集

public static void main(String[] args) { List<String> list1 = new ArrayList<String>(); list1.add("1"); list1.add("2"); list1.add("3"); list1.add("5"); list1.add("6"); List<String>..

gdb 调试_带电体的博客-程序员宅基地

1.使用gdb时,如果想查看gdb版本信息,可以使用“show version”命令;2.gdb在启动时会显示如上类似的提示信息。如果不想显示这个信息,则可以使用-q选项把提示信息关掉:3.使用gdb调试时,使用“info functions”命令可以列出可执行文件的所有函数名称。4.使用gdb调试遇到函数时,使用step命令(缩写为s)可以进入函数(函数必须有调试信息)。可以使用ne...

我身边那些逃离深圳的朋友们_喜欢打酱油的老鸟的博客-程序员宅基地

我身边那些逃离深圳的朋友们上半年疫情刚刚结束,深圳的房地产首先强势走出疫情影响,回归上涨通道,迎来了新一波史诗般的暴涨。其房价涨幅出现2位数的百分比,位居全国第一;很多区域的房价比去年同期增长超过30%,房产单价超过20万人民币的区域越来越大。不能不承认,深圳实在是中国的炒房圣地。只要是在深圳有房子,不管是一套还是多套,业主都能自动在此次暴涨中再次享受睡后收入,享受资产快速增值的快感。在笔者看来,在深圳拥有房产的人都是幸运儿,是当今社会的成功者,是笔者的羡慕对象。笔者认为,没能...

SVM 透彻理解与分析_晨凫追风的博客-程序员宅基地

hit2015spring晨凫追风\frac{hit2015spring}{晨凫追风}欢迎关注我的博客:http://blog.csdn.NET/hit2015spring支持向量机问题 问题先按照几何间隔最大化的原则引出他的问题为minw,b12∥w∥2\min\limits_{w,b}\qquad \frac 1 2 \|w\|^2 s.t.yi(wTxi+b)⩾1,i=1,2,⋯,ms.

react-native 自定义 下拉刷新 / 上拉加载更多 组件_weixin_30412577的博客-程序员宅基地

1.封装 Scroller 组件/** * 下拉刷新/上拉加载更多 组件(Scroller) */import React, {Component} from 'react';import { StyleSheet, Text, View, ListView, ActivityIndicator, RefreshControl,} f...

随便推点

Idea 汉化后定位和系统设置打不开到问题_weixin_34050519的博客-程序员宅基地

百度网盘:此汉化包已经修正过,拿来直接可以用链接:https://pan.baidu.com/s/1wm3NbYSM9Gtsdu2EHQPMIA 密码:qdr31.系统设置(setting)外观选项加载不出来IdeBundle.properties 配置文件汉化到问题2.系统设置(setting)打不开VcsBundle.properties配置文件汉化到问题3.定位按钮找不到U...

Spring学习(二)_weixin_30888027的博客-程序员宅基地

@ComponentScan向Spring IOC容器中注入组件在使用Spring框架开发应用的过程中,大家都知道使用Spring开发应用程序,我们应用程序中大多数的Bean都是通过Spring的IOC容器来管理。将Bean注入到Spring IOC容器中的方式多种多样,如通过传统的XML方式注入,通过注解的方式注入等。本文我们就来详细的探索一下在使用注解配置的方式注入Bean时,@...

python重构php代码_花了半天重构和整理了一只python爬虫splider2019.py_weixin_39765209的博客-程序员宅基地

简单实用的python爬虫脚本,支持下图,数据清洗过滤,存储入库 Mysql,Api post应用场景:crontab 定时监控的抓取某个列表实时的更新,然后发布或保存目前功能点1.下载图片本地化2.数据MYSQL入库3.数据过滤清洗4.采集字段灵活定义 存储表根据爬中字段创建MYSQL字段,也可直接应用于生产环境的数据库,根据生产库设置爬虫字段通过计划任务每3分钟调用脚本以达到实时与采集目标站点...

有关谷歌Chrome OS笔记本上的Flash Player_普通网友的博客-程序员宅基地

听说基于Chrome操作系统的笔记本测试工程已启动(译者注:指Google于12月7日正式发布Chrome OS的同时,推出的一款预装该系统的笔记本,代号为Cr-48,该机是Chroms OS的原型机,不会在市场销售,仅供测试人员使用),我们很是兴奋。自从我们宣布将开发基于Chrome操作系统的Adobe Flash Player起,工程师们已经为整合该项技术开展了大量的...

linux h5 动画软件下载,使用 AppImage 进行 Linux 软件包管理_WuliXQ的博客-程序员宅基地

AppImage 在自足的环境中分发应用, 它适用于任何 Linux 发行版。管理 Linux 机器(尤其是远程机器)的一个重要分就是管理和安装软件。当本地应用程序出现问题时,或者文件系统上的某些文件损坏需要修复时,你通常会希望推送更新,而不必走很多路坐在物理屏幕前。正如我在 Pluralsight 课程《Linux 系统维护和故障排除》中所解释的那样,许多问题当然可以通过 Bash 脚本解决,但...

从平台到中台【下】_大家叫我导演的博客-程序员宅基地

前情提要平台化架构由于缺乏对于前端业务一以贯之的端到端的支撑能力,平台与平台之间存在gap。平台化架构按照康威定律,必然是几个平台,几个团队,涉及到巨大的沟通成本而导致协...

推荐文章

热门文章

相关标签