1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

なんでもrunit化

Last updated at Posted at 2025-02-23

旧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 に以下を書く
/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

/var/service/apache/run
#!/bin/sh
# sleep 4
exec /usr/local/sbin/httpd -DNO_DETACH

注:sleep 4 とありますが、nginx にリバースプロクシをさせるときに必要

nginx

/var/service/nginx/run
#!/bin/sh
exec /usr/local/sbin/nginx -p -g "daemon off;"

mysqld

/var/service/mysqld/run
#!/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

/var/service/php-fpm/run
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/php-fpm --nodaemonize

unbound

/var/service/unbound/run
#!/bin/sh
sleep 3
exec 2>&1
exec /usr/local/sbin/unbound -d -p

sleep 3とありますが、nsdを先に起動させたい時のみ必要

nsd

/var/service/nsd/run
#!/bin/sh
sleep 2
exec 2>&1
exec /usr/local/sbin/nsd -c -d

clamav

clamd

/var/service/clamav-clamd/run
#!/bin/sh
PATH="/usr/bin:/bin"
exec /usr/local/sbin/clamd --foreground 2>&1

freshclam

/var/service/clamav-freshclam/run
#!/bin/sh
PATH="/usr/bin:/bin"
exec /usr/local/bin/freshclam  --foreground 2>&1

Samba

smbd

/var/service/smbd/run
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/smbd -F -d3

-d3 とあるが起動したいプロセス数を指定する

nmbd

/var/service/nmbd/run
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/nmbd -F -d1

-d1 とあるが起動したいプロセス数を指定する

postfix

/var/service/postfix/run
#!/bin/sh
exec 2>&1
umask 022
exec /usr/local/sbin/postfix start-fg

※このスクリプトではdownしません

dovecot

/var/service/dovecot/run
#!/bin/sh
exec 2>&1
exec /usr/local/sbin/dovecot -F

amavisd

/var/service/amavisd/run
#!/bin/sh
exec /usr/local/sbin/amavisd foreground 2>&1

※このスクリプトではdownしません

ntpd

/var/service/ntpd/run
#!/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

/var/service/dhcpd/run
#!/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

こういうのをデーモンにするかどうかはアレですが

/var/service/iperf3/run
#!/bin/sh
exec 2>&1
exec /usr/local/bin/iperf3 -s
1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?