zoukankan      html  css  js  c++  java
  • 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服务的关键,有时整个安装或者重设流程混乱了,重启一下。一切都正常了

  • 相关阅读:
    [转]iOS框架和服务
    [Tips]统计Xcode代码行数
    [转]10个迷惑新手的Cocoa,Objective-c开发难点和问题
    关于 MRC 开发中的一些细节
    关于HTTP状态码的说明
    关于 MRC下自动释放池 的嵌套使用的几个问题
    C语言综合运用-------------编写 < 通讯录 >
    FFT与游戏开发(二)
    FFT与游戏开发(一)
    FFT开坑
  • 原文地址:https://www.cnblogs.com/drek_blog/p/10998034.html
Copyright © 2011-2022 走看看