旧daemontoolsはあたしにとっての重宝品でした
何もかも落ちたらすぐ起動してくれるという
デーモンのためにあるツールであることは変わりありません
また、daemontoolsやrunit化することによって
マルチスレッドでデーモンが起動するので
サーバーの起動速度の向上にもなります
難点はメモリを食うぐらいかしら
とりあえず本記事はrunitを使ったものです
前提
FreeBSD aach64(要するにラズパイ4)
/usr/local/etc を /etc に
/usr/local/bin を /usr/bin に書き換えれば
Linuxにも対応できていますが、動作確認はしていません
サービスの作成方法
- 本来のサービスを止める (service xxxx stopとか/etc/rc.conf とかに)
- mkdir -p /var/service/.SERVICENAME/log (ドットがついていることに注目)
- /var/service/.SERVICENAME/log/run に以下を書く
#!/bin/sh
exec chpst -uroot svlogd -tt ./main
- chmod 755 /var/service/.SERVICENAME/log/run
- これより下にある各サービスの起動スクリプトを /var/service/.SERVICENAME/run に記載する
- chmod 755 /var/service/.SERVICENAME/run
- (テスト) sh /var/service/.SERVICENAME/run (Ctrl+Cで終了)
- mv /var/service/.SERVICENAME /var/service/SERVICENAME
これでデーモンが起動します
簡単なサービスの起動と終了
- sv up SERVICENAME
- sv down SERVICENAME
- sv restart SERVICENAME
- sv reload SERVICENAME
- sv status SERVICENAME
個々のサービスのrunファイルの書き方
Apache2
#!/bin/sh
# sleep 4
exec /usr/local/sbin/httpd -DNO_DETACH
注:sleep 4 とありますが、nginx にリバースプロクシをさせるときに必要
nginx
#!/bin/sh
exec /usr/local/sbin/nginx -p -g "daemon off;"
mysqld
#!/bin/sh
cd /
umask 077
MYSQLADMIN='/usr/local/bin/mysqladmin --defaults-extra-file=/usr/local/etc/mysql/debian.cnf'
trap "$MYSQLADMIN shutdown" 0
trap 'exit 2' 1 2 3 15
/usr/local/bin/mysqld_safe & wait
なお、mariadbでは確認していません
php-fpm
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/php-fpm --nodaemonize
unbound
#!/bin/sh
sleep 3
exec 2>&1
exec /usr/local/sbin/unbound -d -p
sleep 3とありますが、nsdを先に起動させたい時のみ必要
nsd
#!/bin/sh
sleep 2
exec 2>&1
exec /usr/local/sbin/nsd -c -d
clamav
clamd
#!/bin/sh
PATH="/usr/bin:/bin"
exec /usr/local/sbin/clamd --foreground 2>&1
freshclam
#!/bin/sh
PATH="/usr/bin:/bin"
exec /usr/local/bin/freshclam --foreground 2>&1
Samba
smbd
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/smbd -F -d3
-d3 とあるが起動したいプロセス数を指定する
nmbd
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/nmbd -F -d1
-d1 とあるが起動したいプロセス数を指定する
postfix
#!/bin/sh
exec 2>&1
umask 022
exec /usr/local/sbin/postfix start-fg
※このスクリプトではdownしません
dovecot
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/dovecot -F
amavisd
#!/bin/sh
exec /usr/local/sbin/amavisd foreground 2>&1
※このスクリプトではdownしません
ntpd
#!/bin/sh
exec 2>&1
/usr/sbin/ntpdate ntp.jst.mfeed.ad.jp &
/bin/sleep 5
#exec /usr/local/sbin/ntpd -d
exec /usr/sbin/ntpd -n
/usr/sbin/ntpdはntpd - NTP daemon program - Ver. 4.2.8p18
/usr/local/sbin/ntpdはopenntpd
これはバッテリーを搭載していないラズパイ用なので
一度時計を合わせてからでないとうまくいきません
dhcpd
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/dhcpd -f -d --no-pid -cf /var/service/dhcpd/dhcpd.conf -lf /var/service/dhcpd/dhcpd.lease genet0
iperf3
こういうのをデーモンにするかどうかはアレですが
#!/bin/sh
exec 2>&1
exec /usr/local/bin/iperf3 -s