STUNUM

面有萌色,胸有丘壑。心有猛虎,细嗅蔷薇。

嗨,我是王鑫 (@stunum),一名 Python 开发者。


Python web开发,后端以Django框架为主,前端使用Vue.js...

supervisor守护程序

supervisor是用Python开发的一个client/server服务,是Linux/Unix系统下的一个进程管理工具。可以很方便的监听、启动、停止、重启一个或多个进程。用supervisor管理的进程,当一个进程意外被杀死,supervisor监听到进程死后,会自动将它重启,很方便的做到进程自动恢复的功能,不再需要自己写shell脚本来控制。

安装supervisor

$ pip install supervisor

使用supervisor

1、 生成默认的配置文件

$ echo_supervisord_conf > supervisord.conf

2、 修改刚才生成的默认配置文件

$ vim ./supervisord.conf

supervisord.conf文件的尾部找到以下代码并修改

$ -- ;[include]
$ -- ;files = relative/directory/*.ini
$ ++ [include]
$ ++ files = /etc/supervisord/*.conf

以上修改的目的是使supervisord在加载默认配置文件的时候同时加载/etc/supervisord/目录下的所有以conf结尾的配置文件,对以后添加/删除进程管理来说会很方便。

3、 编写需要管理的进程的配置文件

[program:odoo12ERP]
command=/appdata/odoo12_2/venv/bin/python3 /appdata/odoo12_2/odoo/odoo-bin -c /etc/odoo12.conf  ; the program (relative uses PATH, can take args)
process_name=%(program_name)s ; process_name expr (default %(program_name)s)
numprocs=1                    ; number of processes copies to start (def 1)
;directory=/tmp                ; directory to cwd to before exec (def no cwd)
;umask=022                     ; umask for process (default None)
priority=999                  ; the relative start priority (default 999)
autostart=true                ; start at supervisord start (default: true)
startsecs=3                   ; # of secs prog must stay up to be running (def. 1)
startretries=5                ; max # of serial start failures when starting (default 3)
autorestart=unexpected        ; when to restart if exited after running (def: unexpected)
exitcodes=0                   ; 'expected' exit codes used with autorestart (default 0)
stopsignal=QUIT               ; signal used to kill process (default TERM)
stopwaitsecs=10               ; max num secs to wait b4 SIGKILL (default 10)
;stopasgroup=false             ; send stop signal to the UNIX process group (default false)
;killasgroup=false             ; SIGKILL the UNIX process group (def false)
;user=chrism                   ; setuid to this UNIX account to run the program
;redirect_stderr=true          ; redirect proc stderr to stdout (default false)
stdout_logfile=/appdata/odoo12_2/supervisorFiles/        ; stdout log path, NONE for none; default AUTO
stdout_logfile_maxbytes=50MB   ; max # logfile bytes b4 rotation (default 50MB)
stdout_logfile_backups=10     ; # of stdout logfile backups (0 means none, default 10)
;stdout_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stdout_events_enabled=false   ; emit events on stdout writes (default false)
;stdout_syslog=false           ; send stdout to syslog with process name (default false)
;stderr_logfile=/a/path        ; 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 (0 means none, default 10)
;stderr_capture_maxbytes=1MB   ; number of bytes in 'capturemode' (default 0)
;stderr_events_enabled=false   ; emit events on stderr writes (default false)
;stderr_syslog=false           ; send stderr to syslog with process name (default false)
;environment=A="1",B="2"       ; process environment additions (def no adds)
;serverurl=AUTO                ; override serverurl computation (childutils)

以上是我以odoo程序作为例子编写的配置。

值得注意的一点是command参数里面的命令必须是前台形式的,不能用后台守护模式命令,不然supervisor无法管理该程序的进程

3、 启动supervisor

$ supervisord -c /etc/supervisord.conf 

然后就可以通过浏览器打开http://localhost:9001访问管理页面。

如果修改过默认配置里面的端口、登录验证等,以设置的来登录。

更多设置请前往官网查看文档

supervisor官方文档链接

最近的文章

rest_framework中django-filter的In查询操作

IN 操作:举个例子:想要查询tb_student表中ID为1、3、5、6的学生的name、class、score的信息//原始sql语句:SELECT name,class,score FROM tb_student WHERE id in (1,3,5,6);在使用 rest_framework 的筛选时://django_filters的写法import django_filters#继承BaseInFilter以及想要做IN操作的字段类型,比如NumberFilter、CharFi...…

水滴石穿继续阅读
更早的文章

python的函数参数传递机制

函数参数传递机制问题在本质上是调用函数(过程)和被调用函数(过程)在调用发生时进行通信的方法问题。基本的参数传递机制有两种:值传递和引用传递。 值传递(passl-by-value)过程中,被调函数的形式参数作为被调函数的局部变量处理,即在堆栈中开辟了内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数的实参变量的值。 引用传递(pass-by-reference)过程中,被调函数的形式...…

水滴石穿继续阅读