supervisor.conf

  1. [unix_http_server]
  2. file=/var/run/supervisor.sock ; (the path to the socket file)
  3. [supervisord]
  4. logfile=/var/log/supervisor/supervisord.log ; (main log file;default $CWD/supervisord.log)
  5. logfile_maxbytes=500MB ; (max main logfile bytes b4 rotation;default 50MB)
  6. logfile_backups=10 ; (num of main logfile rotation backups;default 10)
  7. loglevel=info ; (log level;default info; others: debug,warn,trace)
  8. pidfile=/var/run/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
  9. nodaemon=false ; (start in foreground if true;default false)
  10. minfds=65536 ; (min. avail startup file descriptors;default 1024)
  11. minprocs=16384 ; (min. avail process descriptors;default 200)
  12. childlogdir=/var/log/supervisor ; ('AUTO' child log dir, default $TEMP)
  13. nocleanup=false
  14. umask=022
  15. [rpcinterface:supervisor]
  16. supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
  17. [supervisorctl]
  18. serverurl=unix:///var/run/supervisor.sock ; use a unix:// URL for a unix socket
  19. [include]
  20. files = /etc/supervisord.d/*.ini
  21. [inet_http_server]
  22. port = 0.0.0.0:29001
  23. username = admin
  24. 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进程则无法重启进程;

原因:

  1. rabbitmq使用rabbitmq-server start 或使用rabbitmq-server启动后,会有两个进程,一个是erlang的节点服务程序;一个是rabbitmq的应用程序;rabbitmq的应用程序在erlang的节点上运行;
  2. 如果强制杀死rabbitmq的应用程序进程,supervisor会尝试启动,这时会尝试启动erlang的节点服务程序和rabbitmq的应用程序,发现已经存在一个erlang的节点服务程序,所以启动会失败;
  3. 如果强制杀死erlang的节点服务程序,这时erlang的节点服务程序和rabbitmq的应用程序都会被停止,如果配置参数为autorestart=unexpected 的话,那么supervisor不会去重启该进程,如果参数设置为autorestart=true,那么supervisor会去重启erlang的节点服务程序和rabbitmq的应用程序;

结论:

  1. 由supervisor管理rabbitmq进程并不是很合适,因为在rabbitmq的应用程序崩溃而erlang的节点服务程序正常的情况下,重启是失败的;
  2. 如果只有节点在运行,但是没有rabbitmq的应用程序实例,那么对于rabbitmq的管理后台也是无法登陆的。