V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
yingping
V2EX  ›  Linux

AWS Linux2023 系统安装 supervisord,在“创建映像”后,/run/supervisor/目录丢失,进程退出

  •  
  •   yingping · 294 天前 · 844 次点击
    这是一个创建于 294 天前的主题,其中的信息可能已经有所发展或是发生改变。

    公司生产服务器使用的 aws 的 ec2 ,本来用的是 linux2 的系统,docker 部署 redis 等基础服务,上周五突然系统异常, grpc: addrConn.createTransport failed to unix:///run/containerd/containerd.sock <nil> 0 <nil>l, Err :connection error: desc = "transport: Error while dialing dial unix:///run/containerd/containerd,sock: timeout ",Reconnecting... 出现后,服务器登陆不上,重启后也无法登陆。不是专业运维,无能为力,干脆用旧版镜像重新启动了服务。 异常后,痛定思痛,重新用 aws linux2023 的系统备用 supervisord 守护进程,管理原生部署的服务,结果,软件基本都安装好了,在做“创建映像”时,supervisord 进程会无故退出,用sudo systemctl start supervisord 也无法启动,看了报错之后发现,因为缺失/run/supervisor/目录,创建后,就可以启动了。 以为是偶发,结果重新镜像再次退出进程,/run/supervisor/缺失。本来想定时对系统做映像的,如果创建会触发服务异常那就没有办法定时备份了……

    请问下大家有没有碰到过类似问题,是如何处理的?

    以下是部分相关配置,并未看到/run/supervisor/这个目录: supervisord.service

    ExecStart=/usr/local/bin/supervisord -c /etc/supervisord.conf
    ExecStop=/usr/local/bin/supervisorctl shutdown
    ExecReload=/usr/local/bin/supervisorctl reload
    

    /etc/supervisord.conf

    [unix_http_server]
    file=/var/run/supervisor/supervisor.sock   ; (the path to the socket file)
    
    [supervisord]
    logfile=/var/log/supervisor/supervisord.log  ; (main log file;default $CWD/supervisord.log)
    logfile_maxbytes=50MB       ; (max main logfile bytes b4 rotation;default 50MB)
    logfile_backups=10          ; (num of main logfile rotation backups;default 10)
    loglevel=info               ; (log level;default info; others: debug,warn,trace)
    pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
    
    [supervisorctl]
    serverurl=unix:///var/run/supervisor/supervisor.sock ; use a unix:// URL  for aunix socket
    
    
    5 条回复    2023-08-04 14:53:22 +08:00
    julyclyde
        1
    julyclyde  
       294 天前
    虽然答案只有几句话,但是要理解这几句话还是需要完整的行业背景
    建议你们还是招个人
    yingping
        2
    yingping  
    OP
       294 天前
    @julyclyde #1 额,求答案,我们就一台服务器……
    julyclyde
        3
    julyclyde  
       294 天前
    先说 containers.sock 的问题:
    因为 docker 公司被骗了,把自家的技术捐献给协会,后期更是拆成了 dockerD+contaierD 两层结构。从你说的“用 docker 但是遇到 containerd 错误”推断应该是这种架构的新版本
    连不上 sock ,那自然是 daemon 推出了。你需要研究一下它为什么推出了,而不是干脆用旧镜像重新启动了服务

    其次,用 supervisord 去守护进程,存在一个问题就是:supervisord 本身的存活怎么保证?
    它退出,你检查发现是缺 run 目录,那为什么会缺呢?配置文件里没有提到 run (只有/var/run/)但是检查发现缺 run ,考虑到新时代的新目录结构,应该是符号连接未建立。那么,为什么没建立呢?你知道它是由 tmpfiles 服务建立的吗?
    GTim
        4
    GTim  
       294 天前
    /run 还是 /var/run 如果是 run 显然配置有错或者有 2 个 supervisord
    yingping
        5
    yingping  
    OP
       292 天前
    @julyclyde #3 谢谢呀,docker 的事情现在不用,也没有深究了,supervisord 退出大致知道为啥了,我在用 AWS 的页面对 EC2 的实例操作“创建映像”时,有个选择是“无重启”,我没有勾选,导致创建映像时原有服务器重启。
    别的平台有人回复解决 supervisord 不能自启动的解决方案:
    因为 /run 目录在系统重启后会被清空。这是因为 /run 目录一般被挂载为一个临时文件系统里。
    在我的 supervisord.service 中补充
    ExecStartPre=/bin/mkdir -p /run/supervisor/

    实测重启服务器能自启成功。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1186 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 18:29 · PVG 02:29 · LAX 11:29 · JFK 14:29
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.