monolithic kernel

daemontoolsでNginx/MySQL/Squidなどを監視

Debian系のOSでaptを利用してNginx/MySQL/Squidなどをインストールした場合、通常はinit.dで起動するように設定されます。しかし、ここでは死活監視を行ってくれる便利なdaemontoolsで起動するように設定してみます。

設定のポイント

daemontoolsでプロセスを監視するときのポイントは、プロセスをフォアグラウンドで動作させることです。デーモンとして動作させてしまうと、対象のプロセスが監視を行っているsvscanから切り離されてしまい、正しく動作しなくなってしまいます。

今回設定を行ったソフトウェアにあるように、大抵のソフトウェアにはデーモン化せずに起動するオプションや設定が用意されているので、それを利用すればOKです。

自作プログラムの場合は、特に深く考えず無限ループになるようなコードを書けばフォアグラウンドで動作していることになります。

Nginxの設定

sudo /etc/init.d/nginx stop
sudo update-rc.d -f nginx remove
cd /etc/service
sudo mkdir nginx
cd nginx
sudo vi run
sudo chmod +x run

/etc/service/nginx/run

daemonディレクティブでoffを指定することで、Nginxをフォアグラウンドで動作させています。

#!/bin/sh
exec 2>&1
exec /usr/sbin/nginx -c /etc/nginx/nginx.conf -g 'daemon off;'

MySQLの設定

MySQLはデフォルトでmysqld_safeが監視を行っているため、特にdaemontoolsで監視する必要はないそうです。

sudo /etc/init.d/mysql stop
sudo update-rc.d -f mysql remove
cd /etc/service
sudo mkdir mysql
cd mysql
sudo vi run
sudo chmod +x run

/etc/service/mysql/run

#!/bin/sh
exec 2>&1
exec /usr/sbin/mysqld --skip-locking --user=mysql

Squidの設定

sudo /etc/init.d/squid stop
sudo update-rc.d -f squid remove
cd /etc/service
sudo mkdir squid
cd squid
sudo vi run
sudo chmod +x run

/etc/service/squid/run

-Nオプションを指定することで、Squidをフォアグラウンドで動作させています。

#!/bin/sh
exec 2>&1
exec /usr/sbin/squid -N -f /etc/squid/squid.conf

参考

追記

  • 2010/07/23
    • mysqld_safeについて追記