2026年6月9日

2026年6月9日

djbdns(tinydns・dnscache)を再起動する手順|svc の使い方と再起動が要らない変更の見分け方

djbdns の各サービスは daemontools の supervise に見張られて動いているため、再起動は kill ではなく svc -t /service/サービス名 で行います。また、tinydns のレコード変更は data.cdb を作り直すだけで反映され、再起動は要りません。この記事では、再起動が必要な変更と不要な変更の見分け方、svc と svstat の使い方、再起動後の確認、再起動がうまくいかないときの切り分けを説明します。

djbdns 本体は 1.05 以降の公式な更新がなく、各ディストリビューションのパッチ版や派生版で使われ続けています(2026年10月現在)。パッケージや導入方法によってサービスの置き場所(/service や /etc/service など)が異なるので、以下のパスは手元の環境に読み替えてください。

再起動が必要な変更と、不要な変更

最初に、本当に再起動が必要かを判断します。djbdns は「データの変更は再起動なしで反映される」作りになっているため、不要な再起動を減らせます。

再起動が不要なもの

  • tinydns のレコード変更:root/data を編集して make(内部で tinydns-data)を実行すると、data.cdb が新しいファイルに置き換わります。tinydns は問い合わせのたびに data.cdb を開くので、次の問い合わせから新しい内容で答えます。
  • axfrdns の許可ルール変更:tcp ファイルを編集して make を実行すると tcp.cdb が作り直され、tcpserver は接続ごとにこのルールを参照します。
  • dnscache の問い合わせ元の追加:root/ip/ にネットワークの名前のファイル(例:root/ip/192.168.1)を作る方式で、多くの環境では再起動なしで受け付けるようになります。

再起動が必要なもの

  • env/ 以下の環境変数(IP・ROOT・CACHESIZE・DATALIMIT など)の変更。これらは起動時にしか読まれません。
  • dnscache の root/servers/ の変更(ルートサーバーや転送先の一覧)。
  • dnscache のキャッシュを空にしたいとき。キャッシュはメモリ上にしかないため、再起動で消えます。
  • バイナリの入れ替え(パッケージ更新など)の後。

「レコードを直したのに古い答えが返る」という理由で tinydns を再起動しても、多くの場合は解決しません。その場合は、make が成功しているか、問い合わせ先のキャッシュサーバーに古い答えが残っていないかを先に確認します。

svstat で現在の状態を確認する

再起動の前に、対象のサービスと、そのログ用サービスの状態を見ます。

svstat /service/tinydns /service/tinydns/log
svstat /service/dnscache /service/dnscache/log

up (pid 1234) 86400 seconds のように表示されれば、そのプロセスが 86400 秒動き続けているという意味です。再起動後にこの秒数が小さくなっていれば、再起動できたと判断できます。supervise not running と出る場合は、サービスそのものではなく、それを見張る svscan 側が動いていません(後述)。

svc で再起動する

daemontools の svc コマンドで supervise に指示を出します。よく使うオプションは次のとおりです。

  • -t:TERM シグナルを送ります。サービスが「動いているべき状態」なら、supervise がすぐに起動し直します。通常の再起動はこれで足ります。
  • -d:停止し、自動での再起動もさせません。
  • -u:起動し、落ちたら起動し直す状態に戻します。
  • -h:HUP シグナルを送ります。tinydns や dnscache は HUP で設定を読み直す作りではないため、再起動の代わりにはなりません。
# tinydns を再起動
svc -t /service/tinydns

# dnscache を再起動(キャッシュが消える)
svc -t /service/dnscache

# 状態を確認(秒数が小さくなっていればよい)
svstat /service/tinydns /service/dnscache

設定を大きく変えるときは、svc -d で止めてから変更し、svc -u で起動すると、変更途中の状態で起動し直されるのを避けられます。ただし止めている間は問い合わせに答えないため、権威サーバーなら複数台あるうちの1台ずつ作業します。

kill でプロセスを直接止めても supervise がすぐに起動し直すので、結果としては再起動になります。しかし、どの PID に何を送ったかが分かりにくくなるため、svc を使うほうが安全です。svc -k(KILL)は、TERM で止まらないときの最後の手段にとどめます。

dnscache を再起動するときの注意

dnscache を再起動するとキャッシュが空になり、しばらくは外部への問い合わせが増えて応答が遅くなります。社内の多くの端末が使っているリゾルバーなら、利用が少ない時間帯を選びます。CACHESIZE を変える場合は、DATALIMIT がそれより十分大きくないと起動できないことがあるため、両方を合わせて見直します。

再起動後に確認すること

再起動したら、状態・ログ・実際の応答の3点を確認します。

# 1. 状態
svstat /service/tinydns

# 2. ログ(タイムスタンプを読める形に変換)
tai64nlocal < /service/tinydns/log/main/current | tail -n 20

# 3. 実際の応答(権威サーバーには再帰なしで問い合わせる)
dig @192.0.2.1 example.com SOA +norec
dig @127.0.0.1 www.example.com A   # dnscache の場合

ログは multilog が log/main/current に書き出しており、行頭の @4000... は TAI64N 形式の時刻です。tai64nlocal を通すとローカル時刻で読めます。tinydns のログには問い合わせ1件ごとの記録が出るので、再起動の後に新しい行が出ていれば、問い合わせを受け付けています。

再起動がうまくいかないときの切り分け

起きやすい順に並べます。

  1. 起動と終了を繰り返している:svstat を数秒おきに実行しても秒数が 0〜1 のままなら、起動直後に落ちています。ログの最後の行を見ます。unable to bind のような内容なら、env/IP のアドレスがそのサーバーに存在しないか、ほかのプログラムが 53 番ポートを使っています。ss -lunp | grep ':53 ' で確かめます。systemd-resolved が 127.0.0.53 で待ち受けている環境では、dnscache を 0.0.0.0 で待ち受けさせると衝突します。
  2. **supervise not running と表示される**:svscan が動いていないか、サービスのディレクトリが svscan の見張り対象(/service など)にリンクされていません。ls -l /service/ でシンボリックリンクを確認し、svscan 自体は systemd の daemontools 用ユニットなど、環境の起動方法で立ち上げ直します。ユニット名はパッケージによって異なります。
  3. **svc -u しても起動しない、または起動後に自動で起動しない**:サービスのディレクトリに down というファイルがあると、svscan の起動時にそのサービスは止まったままになります。意図して置いたものでなければ削除します。
  4. 起動はするが答えない:tinydns なら root/data.cdb が存在するか、make がエラーなく終わったかを確認します。dnscache なら、問い合わせ元のネットワークが root/ip/ に登録されているかを確認します。
  5. 権限のエラー:env/UID・env/GID のユーザーが data.cdb を読めない、ログのディレクトリに書けない、といった場合です。導入時にユーザーを作り直した後などに起きます。

まとめ

  • tinydns のレコード変更は make で data.cdb を作り直せば反映され、再起動は要りません。環境変数・dnscache の転送先の変更・キャッシュの消去には再起動が必要です。
  • 再起動は svc -t /service/サービス名 で行い、svstat の秒数で再起動できたかを確かめます。HUP では設定は読み直されません。
  • 再起動後は、状態・tai64nlocal で読んだログ・dig での応答の3点を確認します。
  • 起動と終了を繰り返すときは、ログの最後の行から、アドレス・ポートの衝突、down ファイル、data.cdb や権限の問題を順に確認します。

お気軽にご相談ください

お見積りへ お問い合わせへ
▲