Supervisor踩过的坑

系统环境 centos 7.6.1810 ,用的是阿里云的服务器
yum update最新版本,先更新到最新的。系统已安装好宝塔6.9最新免费版本

先说正常安装的情况下
1.安装
yum install supervisor
2.指定配置
mkdir /etc/supervisor
新建指定目录,为了避免默认配置会在某些更新覆盖掉
echo_supervisord_conf > /etc/supervisor/supervisord.conf
这里是在新建好的目录新建conf文件,这里关键。默认文件会建立在/etc目录下

3.配置文件修改
配置文件,主要变更如下

[inet_http_server] ; inet (TCP) server disabled by default
port=*:9001 ; (ip_address:port specifier, *:port for all iface)
;username=user ; (default is no username (open server))
;password=123 ; (default is no password (open server))

配置最下面

[include]
files = conf.d/*.conf

当然,这里没指定路径,可以直接把配置放下面
里面的conf文件可以随意添加多个。
举例,其中一个cfwebapp.conf文件,内容如下

[program:Cf.FileApp]
command=dotnet Cf.FileApp.dll ; 运行程序的命令
directory=/www/wwwroot/Cf.FileApp/ ; 命令执行的目录
autorestart=true ; 程序意外退出是否自动重启
stderr_logfile=/var/log/AnuoApc.err.log ; 错误日志文件
stdout_logfile=/var/log/AnuoApc.out.log ; 输出日志文件
environment=ASPNETCORE_ENVIRONMENT=Production ; 进程环境变量
user=root ; 进程执行的用户身份
stopsignal=INT

4.配置服务文件
/usr/lib/systemd/system/下,新建supervisord.service文件。
这里关键,是supervisord文件,建过了supervisor.service文件,配的是supervisord文件,结果导致其实2个不同的启动文件,结果后面造成了设置的混乱。

文件内容如下:

# supervisord service for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon

[Service]
Type=forking
ExecStart=/usr/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/bin/supervisorctl $OPTIONS shutdown
ExecReload=/usr/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

5.开机启动
supervisorctl start all
systemctl enable supervisord
设置启动supervisor
验证是否开机启动:
systemctl is-enabled supervisord

如果没意外情况,这样启动已经可以配置和启动完毕

6.遇到的坑
但是,通常不同服务器,甚至同一个centos镜像(centos版本一样)出来的应用实例
安装还是会遇到不同的问题。
解决办法第一先冷静,centos工具,通常某些配置配错了,打错了等等,导致整个配置跟着错,可以按一下步骤重复继续进行。

如果报错没正常显示
如果路径指错了或者要变更,
supervisorctl reload
当然,reload等于把supervisor服务重新加载。效果是如果有部分服务已经删除了,reload会去掉不存在的服务,再
supervisorctl restart all就会看到挂载的服务先停止了,再全部启动了。

如上面都出现错误信息,可以接着
systemctl daemon-reload
把整个启动模版都重载一下,这样重载后,
重新指定 echo_supervisord_conf > /etc/supervisor/supervisord.conf
等于重复步骤2,直到supervisorctl reload 提示success

服务启动后可以用
systemctl status supervisord.service
查看这个服务的状态

● supervisord.service - Supervisor daemon
Loaded: loaded (/usr/lib/systemd/system/supervisord.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2019-06-09 22:16:19 CST; 26s ago
Main PID: 2678 (supervisord)
Tasks: 17
Memory: 142.3M
CGroup: /system.slice/supervisord.service
├─2678 /usr/bin/python /usr/bin/supervisord -c /etc/supervisor/supervisord.conf
└─3095 dotnet Cf.FileApp.dll

一般active绿色为已激活状态,服务正常运行,服务所启动的进程如下
/etc/supervisor/supervisord.conf 为服务用到的配置文件。


解决unix:///tmp/supervisor.sock no such file的问题
这个问题发生在配置更改或者指定服务路径等匹配不了的时候,默认tmp会存储supervisor一些缓存日志和加锁的文件,而tmp是临时目录,会特定时候触发清理或者丢失,在这样情况下,就会报no such file了。所以把这2种文件指定到非临时目录

1、打开配置文件

vim /etc/supervisor/supervisord.conf
这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉

2、修改权限

sudo chmod 777 /run
sudo chmod 777 /var/log
如果没改,启动报错 IOError: [Errno 13] Permission denied: '/var/log/supervisord.log'

3、创建supervisor.sock

sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
4、启动supervisord,注意stop之前的实例或杀死进程
ps ax | grep supervisord

supervisord

然后重复reload,restart等之前的步骤

最后,如果还运行不了,需重启reboot一下服务器。服务器reboot不是必须,是验证和重新加载supervisord.service服务的关键,有时整个安装或者重设流程混乱了,重启一下。一切都正常了

posted @ 2019-06-10 15:37  Drek  阅读(6892)  评论(0编辑  收藏  举报