使用Supervisor来管理各种中间件
プロセスが落ちた際の自動再起動をしたい場合や、Docker の1つのコンテナの中に各種ミドルウェアをまるっと入れる場合などでアプリケーションの動作に必要なミドルウェアを Supervisor で一元管理したいときがあります。
主管:一个过程控制系统
http://supervisord.org/
Supervisor でデーモンを管理する場合、デーモンをフォアグラウンドで起動させる必要がありますのでミドルウェアの設定変更が必要になる場合があります。その方法についてまとめます。
由于本文是基于CentOS的执行路径,所以如果各种中间件的启动路径等不同,您需要将其更改为您使用的发行版。
Nginx是一个开源的高性能Web服务器和反向代理服务器。
你可以修改配置文件,但你也可以在启动选项中覆盖设置,指定-g “daemon off;”作为启动选项。
此外,由于Nginx将fork出的进程的用户记录在Nginx的配置文件中,因此使用Supervisor启动的进程的执行用户仍保持为root。
[program:nginx]
command=/usr/sbin/nginx -g "daemon off;"
autostart=true
autorestart=true
MySQL = MySQL是一个关系型数据库管理系统。
在MySQL中,需要监视被分叉的进程而不是启动的进程。为此,可以使用Supervisor提供的名为pidproxy的程序进行监视。
子进程
http://supervisord.org/subprocess.html#pidproxy-program
与Nginx相似,派生的进程由运行时选项指定为root。
[program:mysqld]
command=/usr/bin/pidproxy /var/run/mysqld/mysqld.pid /usr/bin/mysqld_safe --datadir=/var/lib/mysql --socket=/var/lib/mysql/mysql.sock --pid-file=/var/run/mysqld/mysqld.pid --basedir=/usr --user=mysql
autostart=true
autorestart=true
MongoDB 是一种数据库管理系统。
在MongoDB中,有一个设置文件中使用”fork”进行启动的设置。如果设置文件中写有”fork = true”,则需要将其改为”fork = false”。
##
bind_ip = 0.0.0.0
port = 27017
-fork = true
+fork = false
pidfilepath = /var/run/mongodb/mongodb.pid
logpath = /var/log/mongodb/mongodb.log
dbpath =/var/lib/mongodb
启动的进程不会被分叉,而是在前台执行,因此要使用合适的用户名来执行,不是root。这里我们使用 RPM 安装 MongoDB 时创建的 mongodb 用户作为 user=mongodb 指定。
[program:mongod]
command=/usr/bin/mongod -f /etc/mongodb.conf
autostart=true
autorestart=true
user=mongodb
Redis (中文: Redis资源发布)
Redis 从2.6版本开始可以通过命令行指定配置文件的值,但为了不依赖于版本,我们选择修改配置文件的值。
如果在设置文件中有”daemonize yes”的描述,那么将其更改为”daemonize no”。
# By default Redis does not run as a daemon. Use 'yes' if you need it.
# Note that Redis will write a pid file in /var/run/redis.pid when daemonized.
-daemonize yes
+daemonize no
# When running daemonized, Redis writes a pid file in /var/run/redis.pid by
# default. You can specify a custom pid file location here.
由于 Redis 进程也在执行用户下启动,因此需要指定以 Redis 用户启动,即 user=redis。
[program:redis]
command=/usr/sbin/redis-server /etc/redis.conf
autostart=true
autorestart=true
user=redis
php-fpm:一个用于处理PHP请求的程序。
在使用php-fpm时,可以像Nginx一样在启动选项中指定以前台模式启动,使用–nodaemonize选项来指定。
在PHP-FPM中,根据每个池(pool)的启动进行配置文件中的运行用户设定,因此执行时用户仍为root。
[program:php-fpm]
command=/usr/sbin/php-fpm --nodaemonize
autostart=true
autorestart=true
如果要启动其他中间件和应用服务器,需要注意的要点是什么?
虽然在上述例子中仅列举了一些中间件的设置和启动示例,但其他中间件和应用服务器也可以如此操作。
-
- フォアグラウドで実行させること
- Supervisor の設定にもよりますが、実行時ユーザーを指定しないと root で起動されるので気をつける
写配置文件时要注意这一点。