supervisor 开机不能正常启动
supervisor启动失败,通过/var/log/syslog 直接报错。
该报错通过systemd控制的sysv init启动脚本报出。从直接报错的代码位置来看是start-stop-daemon启动supervisord 失败。
为什么这里会启动进程失败呢?通过man start-stop-daemon 找到了可能的报错原因。
通过如上分析可以知道这里可能存在了--pidfile 指定的进程id,尝试更改/var/log/supervisord.pid 文件进程id为1(systemd进程名)。此时发现supervisd再也启动不了了,同时也直接如上报错。
那么这里为什么会出现相同进程id的进程名呢?
通过分析这里设备可能存在异常断电导致设备未正常销毁pid文件,再次启动的时候又检测到相同pid的进程名,所以直接导致了进程的启动失败。
pidfile单例模式启动进程这么通用的机制为什么会出现该缺陷?其他守护进程也会出现?还是只是概率问题。
其实不然,以下分析。
在systemd#systemd vs sysv init 详细介绍了sysv init 和systemd控制的进程启动。这里的3.0.0 版本supervisor 通过sysv init启动。sysv init通过start-stop-daemon 和--pidfile 单例模式启动supervisor,升级到高版本的由syste...