Linux运维后台进程管理之Supervisor配置和常用命令常见问题案例和管理odoo后台进程

目录

  • Supervisor是什么?
  • 安装
  • 配置
  • 实例配置
  • 启动
  • Supervisor常用命令
  • 常见错误
            • 配置文件出错,没有开放http接口或相关配置有问题
            • Supervisor未启动,无法运行supervisorctl命令

Supervisor是什么?

Supervisor是一个客户端/服务器系统,允许其用户在Linux/Unix操作系统上控制多个进程,如启动、停止、重启一个或多个进程。还能自动重启被杀死的进程,做到对重要进程的保护。

安装

apt-get install supervisor

安装完成后运行以下命令生成官方配置模版:

 echo_supervisord_conf > /etc/supervisord.conf

配置

编辑supervisord.conf配置文件:

vim /etc/supervisord.conf

以下是配置文件模版:

;示例主管配置文件。
;
;有关配置文件的详细信息,请参阅:
;http://supervisord.org/configuration.html
;
;注:
;-不支持shell扩展(“~”或“$home”)。环境
;变量可以使用以下语法展开:“%(env_home)s”。
;-注释必须有一个前导空格:“A=B ;注释”不是“A=B;注释”。

[unix_http_server]
file=/tmp/supervisor.sock		;(socket文件的路径)
;chmod=0700						;socket文件模式(默认为0700)
;chown=nobody:nogroup			;socket文件uid:gid owner
;username=user					;(默认值为无用户名(open server))
;password=123					;(默认值为无密码(open server))。

;[inet_http_server]				;HTTP服务器,提供web管理界面,默认情况下禁用inet(TCP)服务器
;port=127.0.0.1:9001			;(Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性)
;username=user					;(默认值为无用户名(open server))
;password=123					;(默认值为无用户名(open server))。

[supervisord]
logfile=/tmp/supervisord.log	;(主日志文件;默认值$cwd/supervisord.log)
logfile_max bytes=50MB			;(最大主日志文件字节;默认50MB)
logfile_backups=10				;(主日志文件备份数;默认值10)
loglevel=info					;(日志级别;默认信息;其他:debug,warn,trace)
pidfile=/tmp/supervisord.pid	;(supervisord pidfile;默认supervisord.pid)
nodaemon=false					;(如果为true,则从前台开始;默认为false)
minfds=1024						;(最小可用启动文件描述符;默认值1024)
minprocs=200					;(最小可用进程描述符;默认值200)
;umask=022						;(进程文件创建umask;默认022)
;user=chrism					;(默认为当前用户,如果是根用户,则为必需)
;identifier=supervisor			;(supervisor identifier,默认为'supervisor')
;directory=/tmp					;(启动时默认不为cd)
;nocleanup=true					;(开始时不清理临时文件;默认为false)
;child log dir=/tmp				;('auto'子日志dir,默认$temp)
;environment=key=“value”		;(要添加到环境中的键值对)
;strip_ansi=false				;(在日志中删除ansi转义代码;默认false)

;下面的部分必须保留在rpc的配置文件中。
;(supervisorctl/web接口)要工作,附加接口可以是
;通过在单独的RPCField:Atdies中定义它们来添加。
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock 	;使用UNIX://URL用于UNIX套接字
;serverurl=http://127.0.0.1:9001		;使用HTTP://URL指定一个Inter套接字
;username=chris							;如果设置,则应与http_username相同
;password=123							;如果设置,则应与http_password相同
;prompt=mysupervisor					;CMD行提示(默认“supervisor”)
;history_file=~/.sc_history				;如果可用,请使用读行历史记录

;包含其它配置文件
;[include]
;files = relative/directory/*.ini    ;可以指定一个或多个以.ini结束的配置文件

;下面的示例程序部分显示所有可能的程序子部分值,
;创建一个或多个“真实”程序:可以在
;supervisor。

;[program:theprogramname]		;要管理的经常配置参数,theprogramname是进程的名称
;command=/bin/cat				;程序(相对使用路径,程序启动命令)
;process_name=%(program_name)s	;process_name expr(默认%(program_name)s)
;numprocs=1						;要启动的进程副本数(默认 1)
;directory=/tmp					;目录到cwd到exec之前的目录(默认 no cwd)
;umask=022						;进程的umask(默认为无)
;priority=999					;相对开始优先级(默认999)
;autostart=true					;supervisord 启动时也自动启动(默认值:true)
;startsecs=1					;的secs prog必须保持运行状态(默认。1)
;startretries=3					;启动时串行启动失败的最大值(默认值3)
;autorestart=unexpected        	;如果在运行后退出,则何时重新启动(默认unexpected)
;exit codes=0,2					;'expected'退出代码与autorestart一起使用(默认为0,2)
;stopsignal=quit				;用于终止进程的信号(默认术语)
;stopwaitsecs=10				;等待b4 sigkill的最大秒数(默认值为10)
;stopasgroup=false				;向Unix进程组发送停止信号(默认为false)
;killasgroup=false				;sigkill unix进程组(默认false)
;user=chrism					;setuid到此unix帐户以运行程序
;redirect_stderr=true			;触发输出到stdout重定向(默认为false)
;stdout_logfile=/a/path			;stdout日志路径,无表示无;默认自动
;stdout_logfile_max bytes=1MB	;最大日志文件大小(默认为50MB)
;stdout_logfile_backups=10		;stdout日志文件备份(默认为10)
;stdout_capture_maxbytes=1MB	;capturemode中的字节数(默认为0)
;stdout_events_enabled=false	;在stdout写入时发出事件(默认为false)
;stderr_logfile=/a/path			;stderr日志路径,无表示无;默认自动
;stdout_logfile_maxbytes=1MB   	;最大日志文件字节(默认50MB)
;stdout_logfile_backups=10      ; #stdout日志文件备份数(默认值为10)
;stdout_capture_maxbytes=1MB    ; “CaptureMode”中的字节数(默认为0)
;stdout_events_enabled=false    ; 在stdout发出事件写了(默认false)
;stderr_logfile=/a/path         ; stderr日志路径,无表示无;默认自动
;stderr_logfile_maxbytes=1MB    ; 最大日志文件字节(默认50MB)
;stderr_logfile_backups=10      ;#stderr日志文件备份数(默认值为10)
;stderr_capture_maxbytes=1MB    ; “CaptureMode”中的字节数(默认为0)
;stderr_events_enabled=false    ; 写在标准错误或事件(默认为false)
;environment=A="1",B="2"        ; 过程环境添加(默认无)
;serverurl=AUTO                 ; 覆盖服务器URL计算(childutils)

实例配置

控制odoo进程,使进程意外死掉可以自动重启。

[program:odoo]				;要管理的经常配置参数,odoo是进程的名称
user=odoo
directory=/opt/odoo12
command=/opt/envs/odoo12/bin/python /opt/odoo12/odoo-bin -c /etc/odoo12.conf --logfile /var/log/odoo/odoo-server.log
autostart=true      		;在supervisord启动的时候也自动启动
autorestart=true			;程序退出后自动重启,可选值:[unexpected,true,false],默认为unexpected,表示进程意外杀死后才重启
startsecs=10				;启动10秒后没有异常退出,就表示进程正常启动了,默认为1秒
stopwaitsecs=30				;等待b4 sigkill的最大秒数(默认值为10)
stopsignal=KILL				;用于终止进程的信号(默认TERM)
;killasgroup=true			;默认为false,向进程组发送kill信号,包括子进程
;stopasgroup=true			;默认为false,进程被杀死时,是否向这个进程组发送stop信号,包括子进程
stderr_logfile=/etc/supervisor/log.log
stdout_logfile=/etc/supervisor/log.log

启动

先启动Supervisor:

supervisord -c /etc/supervisord.conf

查询Supervisor是否启动成功:

ps aux|grep supervisor

supervisor进程
查询odoo是否随Supervisor自动启动:

ps aux|grep odoo

odoo后台进程

Supervisor常用命令

supervisorctl 是 supervisord的命令行客户端工具:

supervisorctl status		//查看所有进程的状态
supervisorctl stop odoo		//停止odoo (odoo是进程名称,多个进程用","分隔)
supervisorctl start odoo	//启动odoo
supervisorctl restart odoo	//重启odoo
supervisorctl update 		//配置文件修改后可以使用该命令加载新的配置
supervisorctl reload		//重新启动配置中的所有程序
supervisorctl stop all 	//停止所有进程
......

常见错误

supervisor Error: Cannot open an HTTP server: socket.error reported errno.EADDRNOTAVAIL (99)
配置文件出错,没有开放http接口或相关配置有问题

把http相关的模块删掉试试,如[inet_http_server]

;[inet_http_server]				;HTTP服务器,提供web管理界面,默认情况下禁用inet(TCP)服务器
;port=127.0.0.1:9001			;(Web管理后台运行的IP和端口,如果开放到公网,需要注意安全性)
;username=user					;(默认值为无用户名(open server))
;password=123					;(默认值为无密码(open server))

error: , [Errno 2] No such file or directory: file: /usr/lib/python2.7/socket.py line: 228
Supervisor未启动,无法运行supervisorctl命令

启动Supervisor,或加sudo启动:

sudo supervisord -c /etc/supervisord.conf

如果Supervisor已启动就先kill掉他的进程再启动。

Unlinking stale socket /tmp/supervisor.sock

解决办法:

sudo unlink /tmp/supervisor.sock 

Error: Another program is already listening on a port that one of our HTTP servers is configured to use. Shut this program down first before starting supervisord.

重复启动了Supervisor,可以吧之前启动的Supervisor进程kill掉。

你可能感兴趣的:(Linux,运维,odoo)