supervisor.conf
[unix_http_server]
file=/var/run/supervisor.sock ; (the path to the socket file)
[supervisord]
logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=500MB ; (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)
nodaemon=false ; (start in foreground if true;default false)
minfds=65536 ; (min. avail startup file descriptors;default 1024)
minprocs=16384 ; (min. avail process descriptors;default 200)
childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
nocleanup=false
umask=022
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
[include]
files = /etc/supervisord.d/*.ini
[inet_http_server]
port = 0.0.0.0:29001
username = admin
password = xxxisthebest
rabbitmq.ini
只适合开机启动,不用做restart
[program:rabbitmq]
command=/usr/lib/rabbitmq/bin/rabbitmq-server
process_name=%(program_name)s
directory=/usr/lib/rabbitmq/bin/
user=root
stopsignal=INT
autostart=true
autorestart=true
numprocs=1
startsecs=5
environment=HOME=/usr/lib/erlang/erts-8.2.1/bin/
stderr_logfile=/var/log/rabbitmq/rabbitmq.error.log
stdout_logfile=/var/log/rabbitmq/rabbitmq.stdout.log
stdout_logfile_maxbytes=10MB
stdout_logfile_backups=10
stdout_capture_maxbytes=10MB
rabbitmq重启失败
- 发现手动杀死rabbitmq的进程后,supervisor重启rabbitmq要么失败,要么不重启;
- 如果采取supervisor后台的进程管理来启动和停止rabbitmq是可以的,但是如果手动杀死rabbitmq进程则无法重启进程;
原因:
- rabbitmq使用rabbitmq-server start 或使用rabbitmq-server启动后,会有两个进程,一个是erlang的节点服务程序;一个是rabbitmq的应用程序;rabbitmq的应用程序在erlang的节点上运行;
- 如果强制杀死rabbitmq的应用程序进程,supervisor会尝试启动,这时会尝试启动erlang的节点服务程序和rabbitmq的应用程序,发现已经存在一个erlang的节点服务程序,所以启动会失败;
- 如果强制杀死erlang的节点服务程序,这时erlang的节点服务程序和rabbitmq的应用程序都会被停止,如果配置参数为autorestart=unexpected 的话,那么supervisor不会去重启该进程,如果参数设置为autorestart=true,那么supervisor会去重启erlang的节点服务程序和rabbitmq的应用程序;
结论:
- 由supervisor管理rabbitmq进程并不是很合适,因为在rabbitmq的应用程序崩溃而erlang的节点服务程序正常的情况下,重启是失败的;
- 如果只有节点在运行,但是没有rabbitmq的应用程序实例,那么对于rabbitmq的管理后台也是无法登陆的。