supervisor 使用 .sock 文件来做通信管理
一般supervisor 使用root启动,为了使其他用户可以使用supervisorctl 需要把 supervisor.sock 修改成为 777权限
一般这种进程管理由root启动,由其他用户管理控制,如此就可以实现
但是如果不同用户的基础环境配置不一样,比如root用户与非root用户(假设是work)使用不同版本的python包管理,或这相同版本不同用户拥有不同的包版本控制,并且work用户的需要启动进程配置启动环境依赖于work目录,那么使用supervisor管理进程就无法启动进程。
原因如下:
1.不同版本Python的环境或者非同一包版本控制路径的依赖不一样,无法启动进程
2.对于默认了当前用户环境,比如airflow,默认的控制和配置就在当前用户(work) /home/work/airflow/ 文件夹下,如果使用 root启动 supervisor,就会默认为root用户的环境配置,即supervisor 在root下启动的 airfow 的配置会默认为 /home/root/airflow/ 下, 所以还需要使用work作为 airflow的实际 用户,并且使用supervisor做进程管理和监控的话,就不能使用 root启动 supervisor
此时需要用work启动 supervisor,步骤如下:
1. root用户检查supervisor版本,确保python2和python3的版本一致,如果不一致,可以选择卸载低版本,使用高版本的,我本地卸载了python2,使用python3的4.2.2
2.安装配置(网上教程一堆)之后,修改配置文件,把 .sock 等文件的位置配置到 work用户文件夹下,比如 /home/work/supervisord/supervisor.sock,
[unix_http_server]
file=/home/work/supervisord/supervisor.sock
[supervisorctl]
serverurl=unix:///home/work/supervisord/supervisor.sock
[supervisord]
pidfile=/home/work/supervisord/supervisord.pid
logfile=/home/work/supervisord/supervisord.log
3. touch /home/work/supervisord/supervisor.sock
chmod 777 /home/work/supervisord/supervisor.sock
4. 相同的把 supervisor.log, supervisor.pid也可以移到work目录下
5.切换到work用户,启动supervisor
此时会发现依赖于work环境配置的进程可以顺利启动