[CentOS][起動スクリプト] UnboundおよびNSD4がboot時に起動してこないことに対処してみた。

AIX、UNIX、Linux

自宅環境でKVM上で動作しているCentOS 6.4 x64なサーバがあるのですが、その上でUnboundとNSD4を動かし宅内DNSサーバとして稼働させています。
しかしながら以前から掲題のような問題が発生していました。

問題の出た環境:

# cat /etc/redhat-release
CentOS release 6.4 (Final)
# unbound-control status
version: 1.4.22
verbosity: 2
threads: 2
modules: 2 [ validator iterator ]
uptime: 2345 seconds
unbound (pid 1145) is running...
# nsd-control status
version: 4.0.0
verbosity: 1
ratelimit: 200
# cat /var/log/boot.log
FATAL: Module scsi_wait_scan not found.
Welcome to CentOS
Starting udev:                                             [  OK  ]
~中略~
Starting nsd4...                                           [FAILED]
Starting unbound: Nov 27 22:45:15 unbound[1097:0] error: can't bind socket: Cannot assign requested address
Nov 27 22:45:15 unbound[1097:0] debug: failed address 2001:xxxx:xxxx:xxxx:xxxx::249 port 53
Nov 27 22:45:15 unbound[1097:0] fatal error: could not open ports
[FAILED]
# tail /var/log/nsd4/nsd4.log
[1385559915] nsd[1083]: error: can't bind udp socket: Cannot assign requested address
[1385559915] nsd[1083]: error: server initialization failed, nsd could not be started

どうやら、ネットワークインターフェースにIPv6アドレスが付与されるまでの間にサービスが起動しようとして、紐付けが出来なくて起動に失敗しているようです。ただし、bootが終わったあと普通にservice unbound start など実行すれば正常に起動してくるので、単純に起動時のヒモ付の問題だけのようです。

そのことをTwitterで呟いたところ、@wakadannacom さんからアドバイスが。

というありがたいアドバイスを頂いたので、拙い知識ではありますが、起動スクリプトを修正してみることにしました。

具体的には、起動スクリプトのstart句の部分に、ネットワークインターフェースがupしているかどうかの判定をいれ、起動していないようであればSleepさせて起動を待つ、というような感じにしています。

# starting wait
# Source networking configuration.
. /etc/sysconfig/network # check net-if up

if [ $NETWORKING = "no" ]; then
	sleep 3
fi;

これで再起動を実施してみたところ、無事に起動してくることを確認しました。

# cat /var/log/boot.log
FATAL: Module scsi_wait_scan not found.
Welcome to CentOS
Starting udev:                                             [  OK  ]
Setting hostname dns1.kometch.local:                       [  OK  ]
Remounting root filesystem in read-write mode:             [  OK  ]
Mounting local filesystems:                                [  OK  ]
Enabling /etc/fstab swaps:                                 [  OK  ]
Entering non-interactive startup
Starting monitoring for VG VolGroup:   2 logical volume(s) in volume group "VolGroup" monitored
[  OK  ]
Bringing up loopback interface:                            [  OK  ]
Bringing up interface eth0:                                [  OK  ]
Starting sshd:                                             [  OK  ]
Starting ntpd:                                             [  OK  ]
Starting nsd4...                                           [  OK  ]
Starting unbound:                                          [  OK  ]
Starting tuned:                                            [  OK  ]
Starting Zabbix agent:                                     [  OK  ]
Starting crond:                                            [  OK  ]

今回はunboundもNSDもソースからコンパイルし、その中に入っているinitファイルを使用してこの問題に直面しましたが、他の方でこの問題に遭遇している人はいないのか気になっています。

また、今回の問題の対処方法以外にも以下のような方法もあるようです。

ただ、今回は起動スクリプト中にしっかりと「Required-Start: $network」が指定されているにもかかわらず、それに準じた動きをしていないのが、非常に気になりました。この辺りの事情をご存じの方がいらっしゃいましたら、是非ともご教授ください。

今回の問題に付き合っていただいた@wakadannacom さん、本当にありがとうございました。

参考:

LSBInitScripts – Debian Wiki /
https://wiki.debian.org/LSBInitScripts

DVD付 CentOS徹底入門 第3版
DVD付 CentOS徹底入門 第3版
(2012/03/09)
中島 能和、飛田 伸一郎 他

 

商品詳細を見る

Linuxエンジニア養成読本 [仕事で使うための必須知識&ノウハウ満載!] (Software Design plus)
Linuxエンジニア養成読本 [仕事で使うための必須知識&ノウハウ満載!] (Software Design plus)
(2011/04/08)
SoftwareDesign編集部

 

商品詳細を見る

この記事を書いた人

kometchtech

うつ病を患いながら、IT業界の末席にいるおっさんエンジニア。科学計算をしたことがないのに、HPC分野にお邪魔している。興味のある分野で学習したことをblogにまとめつつ、うつ病の経過症状のメモも置いておく日々。じつはRouterboard User Group JPの中の人でもある。 Amazon欲しいものリスト / Arm板を恵んでくれる人募集中

kometchtechをフォローする
タイトルとURLをコピーしました