公司生产服务器使用的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/缺失。本来想定时对系统做映像的,如果创建会触发服务异常那就没有办法定时备份了。
没有查到aws的ec2服务器在做创建映像时,是否会移除/run/了,也没有查到用sudo 去启动supervisor时为啥要创建/run/supervisor/目录,且无法自动创建成功。
请问下大家有没有碰到过类似问题,是如何处理的?
希望可以正常创建映像,不会影响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
因为 /run 目录在系统重启后会被清空。这是因为 /run 目录一般被挂载为一个临时文件系统里
你要在 supervisord 的 systemd 服务文件里加一个 ExecStartPre 指令,用在 supervisord 启动之前创建 /run/supervisor/ 目录:
ExecStartPre 指令会在 ExecStart 指令之前执行,/bin/mkdir -p /run/supervisor/ 命令会创建 /run/supervisor/ 目录,-p 参数会确保如果目录已经存在,命令不会报错。
。
修改完配置文件后: