supervisor的使用

Supervisor python2 环境。官方还没有出py3的版本,不过不影响管理py3的进程。
supervisord 提供实际的服务,服务端
supervisorctl 命令行解释器,客户端

安装

ubuntu 18.04 bionic
sudo apt update
sudo apt install python-pip
使用 root 用户安装
pip install supervisor
Note: after install, need reconnect ssh terminal otherwise cannot find the supervisor

not root user install path this will cause start problem:
/home/ubuntu/.local/bin/
/home/ubuntu/.local/lib/python2.7/site-packages/supervisor


配置

生成一份配置文件
echo_supervisord_conf > /etc/supervisord.conf
# 没有 root 权限可以放在当前目录
echo_supervisord_conf > supervisord.conf
# 启动时指定配置文件路径
supervisord -c supervisord.conf

# 创建日志目录,然后给写权限
sudo chmod -R 777 /var/log/supervisor
修改下面的配置
[supervisord]
logfile=/var/log/supervisor/supervisord.log
pidfile=/home/tyler/supervisor/supervisord.pid

修改下面配置,指定一个项目配置项的目录
[include]
files = /home/tyler/supervisor/*.conf

如果需要打开web管理支持,修改下面配置
; 必须和'unix_http_server'里面的设定匹配
[supervisorctl]
serverurl=unix:///home/tyler/supervisor/supervisor.sock ; use a unix:// URL for a unix socket

[unix_http_server]
;修改为 /home/supervisor 目录,避免被系统删除
file=/home/tyler/supervisor/upervisor.sock ; the path to the socket file

然后在制定的目录里面新建配置文件
参考如下:
[program:gunicorn]
command=/Library/anaconda/envs/flaskPy3/bin/gunicorn mailServerStudy:app -p mailServerStudy.pid -c gunicorn_config.py
directory=/Users/zhengjun/project/PycharmProjects/mailService/app/
startsecs=5
stdout_logfile=/var/log/supervisor/%(program_name)s.log
stderr_logfile=/var/log/supervisor/%(program_name)s.log
autorestart=true
autostart = true ; 在 supervisord 启动的时候也自动启动

tomcat config

find tomcat process

ps -ef |grep tomcat

output:
sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager -Djava.endorsed.dirs=/java/tomcat/common/endorsed -classpath :/java/tomcat/bin/bootstrap.jar:/java/tomcat/bin/commons-logging-api.jar -Dcatalina.base=/java/tomcat -Dcatalina.home=/java/tomcat -Djava.io.tmpdir=/java/tomcat/temp org.apache.catalina.startup.Bootstrap start

说明tomcat已经正常启动, 5144 就为进程号 pid = 5144

manual operation
bin/startup.sh #启动tomcat
bin/shutdown.sh #停止tomcat
[program:tomcat]
command=/servers/apache-tomcat-8.5.34/bin/catalina.sh run
environment=JAVA_HOME="/servers/jdk1.8.0_181/",JAVA_BIN="/servers/jdk1.8.0_181/bin"
directory=/servers/apache-tomcat-8.5.34
autostart = true
autorestart=true
redirect_stderr=true
stdout_logfile=/servers/apache-tomcat-8.5.34/logs/%(program_name)s.log
stdout_logfile_maxbytes=0
stderr_logfile=/servers/apache-tomcat-8.5.34/logs/%(program_name)s.log

启动服务

supervisord -c supervisord.conf
supervisord -c /home/ubuntu/supervisor/supervisord.conf

问题:
Error: Another program is already listening on a port that one of our HTTP servers is configured to use
答案:

find / -name supervisor.sock
unlink /***/supervisor.sock

查看是否运行
ps aux|grep supervisord

常用命令

supervisorctl status
supervisorctl stop all
supervisorctl stop gisServer
supervisorctl start gisServer
supervisorctl restart gunicorn
修改配置文件后需要执行
supervisorctl reread
supervisorctl update

访问web管理

127.0.0.9010

自动启动

配置systemctl服务
进入/lib/systemd/system目录,并创建supervisord.service文件

[Unit]
Description=supervisor
After=network.target

[Service]
Type=forking
ExecStart=/home/ubuntu/.local/bin/supervisord -c /servers/supervisor/supervisord.conf
ExecStop=/home/ubuntu/.local/bin/supervisorctl $OPTIONS shutdown
ExecReload=/home/ubuntu/.local/bin/supervisorctl $OPTIONS reload
KillMode=process
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target

设置开机启动
激活开机启动命令
sudo chmod 766 supervisord.service
sudo systemctl enable supervisord.service
sudo systemctl daemon-reload

sudo systemctl disable supervisord.service

sudo systemctl start supervisord.service
sudo systemctl stop supervisord.service
sudo systemctl reload supervisord.service
sudo systemctl status supervisord.service

sudo systemctl start supervisord.service
Starting supervisord: Traceback (most recent call last):
File "/usr/bin/supervisord", line 2, in <module>
from supervisor.supervisord import main
ImportError: No module named supervisor.supervisord

说是 python 版本的问题,为啥装到这个位置,奇怪
#!/usr/bin/python
/home/ubuntu/.local/lib/python2.7/site-packages/supervisor

使用 sudo -i 切换到 root 用户安装一下,就可以了。

// 查看错误
journalctl -xe