分享

安装使用supervisor来启动服务

 昵称21532077 2022-05-17 发布于浙江

supervisor 使用方法

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

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

  • 服务挂掉后,自动重启

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

让我们开始吧!

1.supervisor安装

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

# ubuntu安装:sudo apt-get install supervisor# centos安装yum install -y supervisor# 基于python库安装pip2 install supervisoreasy_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                            ; 默认为1process_name=%(program_name)s         ; 默认为 %(program_name)s,即 [program:x] 中的 xuser=root                             ; 使用 root 用户来启动该进程autorestart=true                      ; 程序崩溃时自动重启,重启次数是有限制的,默认为3次redirect_stderr=true                  ; 重定向输出的日志stdout_logfile = /var/log/supervisord/tornado_server.logloglevel=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.confError: 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 archivearchive: ERROR (no such file)

执行下面命令发现报错

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

说明supervisor无法解析该指令

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

[program:archive]# 改变前:command=archive         # 改变后:command=/opt/deploy/archive/archive         ...

参考文章
ubuntu中supervisor的安装及配置

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多