1 安装

我的环境是,CentOS Linux 7.7.1908 (Core) 网站是.netcore3.\

1.1 先yum安装

yum install supervisor 

windows2012 Redis 服务总是突然停止_守护

Total download size: 519 k
Installed size: 2.5 M
Is this ok [y/d/N]: y
Downloading packages:
(1/2): python-meld3-0.6.10-1.el7.x86_64.rpm                                         |  73 kB  00:00:00     
(2/2): supervisor-3.1.4-1.el7.noarch.rpm                                            | 446 kB  00:00:00     
-----------------------------------------------------------------------------------------------------------
Total                                                                      2.1 MB/s | 519 kB  00:00:00     
Running transaction check
Running transaction test
Transaction test succeeded
Running transaction
  Installing : python-meld3-0.6.10-1.el7.x86_64                                                        1/2 
  Installing : supervisor-3.1.4-1.el7.noarch                                                           2/2 
  Verifying  : python-meld3-0.6.10-1.el7.x86_64                                                        1/2 
  Verifying  : supervisor-3.1.4-1.el7.noarch                                                           2/2 

Installed:
  supervisor.noarch 0:3.1.4-1.el7                                                                          

Dependency Installed:
  python-meld3.x86_64 0:0.6.10-1.el7

因为安装的版本supervisor.noarch 0:3.1.4-1.el7   很旧是2015年的, 所以我们要升级

on 6 Apr 
3.4.0  …
 1bd50f3   zip   tar.gz
on 23 Dec 2018 
3.3.5  …
 4f356b7   zip   tar.gz
on 16 Feb 2018 
3.3.4  …
 c773b73   zip   tar.gz
on 25 Jul 2017 
3.3.3  …
 34b690a   zip   tar.gz
on 25 Jul 2017 
3.2.4  …
 6ddf270   zip   tar.gz
on 25 Jul 2017 
3.1.4  …
 fbf9296   zip   tar.gz
on 25 Jul 2017 
3.0.1  …
 00d6669   zip   tar.gz
on 4 Jun 2017 
3.3.2  …
 42bfa55   zip   tar.gz
on 3 Aug 2016 
3.3.1  …
 504e2fb   zip   tar.gz
on 15 May 2016 
3.3.0  …
 4142109   zip   tar.gz
on 20 Mar 2016 
3.2.3  …
 8286f01   zip   tar.gz
on 5 Mar 2016 
3.2.2  …
 26cc505   zip   tar.gz
on 7 Feb 2016 
3.2.1  …
 b7e4ed8   zip   tar.gz
on 1 Dec 2015 
3.2.0  …
 5fcab2c   zip   tar.gz
3.1.3  …
 f067ed4   zip   tar.gz
on 8 Sep 2014 
3.1.2  …
 7786119   zip   tar.gz
on 12 Aug 2014 
3.1.1  …
 62dd947   zip   tar.gz
on 30 Jul 2014 
3.1.0  …
 fa45f8f   zip   tar.gz
on 31 Jul 2013 
3.0  …
 b0cb098   zip   tar.gz
on 29 May 2013 
3.0b2  …
 8a45b14   zip   tar.gz
on 11 Sep 2012 
3.0b1  …
 34c43e9   zip   tar.gz
on 7 Dec 2011 
3.0a12  …
 0e53f90   zip   tar.gz
on 7 Dec 2011 
3.0a11  …
 fab3d25   zip   tar.gz
on 31 Mar 2011 
3.0a10  …
 24ce360   zip   tar.gz

 

2下载supervisor , 升级安装

https://github.com/Supervisor/supervisor/releases 

 2.1文件上传到/usr/local/src

我这里下载的是supervisor-3.4.0.tar.gz  因为系统的python是2.7.5 怕更高了需要3.0支持

https://github.com/Supervisor/supervisor/releases/tag/3.4.0


2.2 命令手动安装

cd /usr/local/src
tar -zxvf supervisor-3.4.0.tar.gz
cd supervisor-3.4.0
python setup.py install
Installed /usr/lib/python2.7/site-packages/supervisor-3.4.0-py2.7.egg
Traceback (most recent call last):
  File "setup.py", line 86, in <module>
    'pidproxy = supervisor.pidproxy:main',
  File "/usr/lib64/python2.7/distutils/core.py", line 152, in setup
    dist.run_commands()
  File "/usr/lib64/python2.7/distutils/dist.py", line 953, in run_commands
    self.run_command(cmd)
  File "/usr/lib64/python2.7/distutils/dist.py", line 972, in run_command
    cmd_obj.run()
  File "/usr/lib/python2.7/site-packages/setuptools/command/install.py", line 73, in run
    self.do_egg_install()
  File "/usr/lib/python2.7/site-packages/setuptools/command/install.py", line 101, in do_egg_install
    cmd.run()
  File "/usr/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 380, in run
    self.easy_install(spec, not self.no_deps)
  File "/usr/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 604, in easy_install
    return self.install_item(None, spec, tmpdir, deps, True)
  File "/usr/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 655, in install_item
    self.process_distribution(spec, dist, deps)
  File "/usr/lib/python2.7/site-packages/setuptools/command/easy_install.py", line 701, in process_distribution
    distreq.project_name, distreq.specs, requirement.extras
TypeError: __init__() takes exactly 2 arguments (4 given)

看到成功的安装提示 Installed /usr/lib/python2.7/site-packages/supervisor-3.4.0-py2.7.egg

但是有个报错, 怀疑是之前安装了版本的问题, 试试可用不 

2.3 测试

supervisorctl status

windows2012 Redis 服务总是突然停止_python_02

提示没有配置文件,应该是正常的 我们先加配置文件 

如果发现报错

error: <class 'socket.error'>, [Errno 113] No route to host: file: /usr/lib64/python2.7/socket.py line: 571

先yum安装一下老版本

之后就是

unix:///var/run/supervisor/supervisor.sock no such file
 

3配置

命令查看 /etc/supervisord.conf 这个文件

 最结尾看到

windows2012 Redis 服务总是突然停止_netcore_03

[include]
files = supervisord.d/*.ini

所以只要是/etc/supervisord.d/下面的所有ini文件 都会被加载 .

有些作者会让新建/etc/supervisord目录,或者配置文件后缀是.conf 其实都要看软件版本,不能一概而论.

如果是dotnet网站先/etc/supervisord.d下建立一个dotnet.ini 

[program:dotnet]
command=dotnet InterfaceWeb.dll   
directory=/www/wwwroot/myweb/  
environment=ASPNETCORE__ENVIRONMENT=Production
user=root
stopsignal=INT
autostart=true
autorestart=true
startsecs=1
stderr_logfile=/www/wwwroot/dotnet.err.log
stdout_logfile=/www/wwwroot/dotnet.out.log

windows2012 Redis 服务总是突然停止_python_04

注意这里的路径都要存在stderr_logfile 和 stdout_logfile .具体每个参数代表什么意思,应该也很容易理解, 我不用中文注释了,怕格式问题,导致加载失败.

如果是Redis等其他服务 配置基本类似.

[program:redis]
command=/usr/bin/redis-server /usr/local/redis/redis.conf
autorstart=true
autorestart=true
stdout_logfile=/tmp/supervisor.log
[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

4 启动并设置开机启动

 supervisord -c /etc/supervisord.conf  #启动服务

windows2012 Redis 服务总是突然停止_python_05

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

supervisord -c /etc/supervisord.conf  #启动服务

supervisorctl shutdown #关闭
supervisorctl status:查看所有进程的状态
supervisorctl stop dotnet:停止dotnet
supervisorctl start dotnet:启动dotnet
supervisorctl restart dotnet: 重启dotnet
supervisorctl update :配置文件修改后可以使用该命令加载新的配置
supervisorctl reload: 重新启动配置中的所有程序

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

查看状态supervisorctl status .看到如下 表示已经成功运行了

windows2012 Redis 服务总是突然停止_python_06

如果看到的是这样的错误

dotnet                           FATAL     Exited too quickly (process log may have details)
检查 ini文件的路径 .

检查启动命令 

检查完成后用下面的kill 干掉进程,重新执行supervisord -c /etc/supervisord.conf

5 可能存在的问题

windows2012 Redis 服务总是突然停止_supervisor_07

这个是因为端口被占用 干掉进程 重新启动就行

查看 ps -aux|grep supervisord

kill *****

windows2012 Redis 服务总是突然停止_自启_08

DeprecationWarning: Parameters to load are deprecated.  Call .resolve and .require separately.
  return pkg_resources.EntryPoint.parse("x="+spec).load(False)

这个是因为log文件问题, 大概率是因为版本过低,不支持stdout_logfile参数. 要保留这个就需要升级, 不需要就注释这个配置行就行

6 关于网站控制进程

解开这个配置 /etc/supervisord.conf , 然后设置端口和账号密码

windows2012 Redis 服务总是突然停止_守护_09

如果还不能访问, 检查一下端口是否被禁止了. 

[inet_http_server]         ; inet (TCP) server disabled by default
port=*:19901        ; (ip_address:port specifier, *:port for all iface)
username=do***et              ; (default is no username (open server))
password=2hj******33               ; (default is no password (open server))

查看端口 netstat -nltp | grep 19901

windows2012 Redis 服务总是突然停止_自启_10

看看宝塔面板是否没有放行你使用的端口

windows2012 Redis 服务总是突然停止_python_11


检查云服务器后台的防火墙配置

浏览器地址访问:

http://IP.IP.IP.IP:19901

输入配置的账号密码

username=do***et              ; (default is no username (open server))
password=2hj******33               ; (default is no password (open server))

windows2012 Redis 服务总是突然停止_python_12

7 卸载

yum uninstall supervisor 等等

 

8 其他报错

# supervisorctl reload
error: <class 'socket.error'>, [Errno 2] No such file or directory: file: /usr/lib64/python2.7/socket.py line: 224
 

使用这样来启动

supervisord -c /etc/supervisord.conf