1、安装Python包管理工具(easy_install)
yum install python-setuptools
2、安装Supervisor
easy_install supervisor
3、配置Supervisor应用守护
3.1 通过运行echo_supervisord_conf程序生成supervisor的初始化配置文件
mkdir /etc/supervisor
echo_supervisord_conf > /etc/supervisor/supervisord.conf
3.2 然后查看路径下的supervisord.conf。在文件尾部添加如下配置
...
;[include]
;files = relative/directory/*.ini
;conf.d 为配置表目录的文件夹,需要手动创建
[include]
files = conf.d/*.conf
3.3 为你的程序创建一个.conf文件,放在目录"/etc/supervisor/conf.d/"下
[program:xxx]
;environment=JAVA_HOME=//jdk1.8.0/bin ; 这里可以创建环境变量
directory = /opt/4kgarden/java/xxx ; 程序的启动目录
command = java -jar -server -Xms256m -Xmx512m -Djava.io.tmpdir=/tmp -Djava.security.egd=file:/dev/./urandom sdk_server_java_hw-1.0.3.jar --spring.profiles.active=test -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:./gc.log -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=./jvmlogs ; 启动命令,可以看出与手动在命令行启动的命令是一样的
autostart = true ; 在 supervisord 启动的时候也自动启动
startsecs = 30 ; 启动 30 秒后没有异常退出,就当作已经正常启动了
autorestart = true ; 程序异常退出后自动重启
startretries = 3 ; 启动失败自动重试次数,默认是 3
user = tomcat ; 用哪个用户启动
redirect_stderr = true ; 把 stderr 重定向到 stdout,默认 false
stdout_logfile_maxbytes = 20MB ; stdout 日志文件大小,默认 50MB
stdout_logfile_backups = 20 ; stdout 日志文件备份数
; stdout 日志文件,需要注意当指定目录不存在时无法正常启动,所以需要手动创建目录(supervisord 会自动创建日志文件)
stdout_logfile = /opt/4kgarden/java/xxx/logs/start.log ;应用日志目录
3.4 运行supervisord,查看是否生效,不报错就OK
supervisord -c /etc/supervisor/supervisord.conf
4、配置Supervisor开机启动
4.1 /usr/lib/systemd/system/ 目录中新建一个“supervisord.service”文件
# dservice for systemd (CentOS 7.0+)
# by ET-CS (https://github.com/ET-CS)
[Unit]
Description=Supervisor daemon
[Service]
Type=forking
ExecStart=/usr/local/bin/supervisord -c /etc/supervisor/supervisord.conf
ExecStop=/usr/local/bin/supervisorctl shutdown
ExecReload=/usr/local/bin/supervisorctl reload
KillMode=process
Restart=on-failure
RestartSec=42s
[Install]
WantedBy=multi-user.target
4.2 开启开机启动
systemctl enable supervisord
4.3 验证是否成功
systemctl is-enabled supervisord
4.4 常用命令
supervisorctl restart <application name> ;重启指定应用
supervisorctl stop <application name> ;停止指定应用
supervisorctl start <application name> ;启动指定应用
supervisorctl restart all ;重启所有应用
supervisorctl stop all ;停止所有应用
supervisorctl start all ;启动所有应用
*4.5 *参考文档
*4.6 解决unix:///tmp/supervisor.sock no such file的问题
(1)修改路径
这里把所有的/tmp路径改掉,/tmp/supervisor.sock 改成 /var/run/supervisor.sock,/tmp/supervisord.log 改成 /var/log/supervisor.log,/tmp/supervisord.pid 改成 /var/run/supervisor.pid 要不容易被linux自动清掉
(2)修改权限
sudo chmod 777 /run
sudo chmod 777 /var/log
如果没改,启动报错 IOError: [Errno 13] Permission denied: ‘/var/log/supervisord.log’
(3)创建supervisor.sock
sudo touch /var/run/supervisor.sock
sudo chmod 777 /var/run/supervisor.sock
(4)启动supervisord,注意stop之前的实例或杀死进程
supervisord