CentOS6でdaemontoolsを使う

以前の予告でCloudForecastをdaemontoolsの管理下において使う方法を書く!と言っておきながらだいぶあいてしまいました。理由は、CentOS6でdaemontoolsを動かすのに苦労して、ちょっと投げ出し気味になっていたからです。


そんな私にもようやく春が訪れ、無事に(?)daemontoolsを動かすことが出来ました!


CentOS6(というよりRHEL6)からはSysvinitからUpstartにかわっており、従来通りの /etc/inittab に管理プロセスの respawn 指定をしておくことができなくなりました。そこで、ここ( CentOS6にdaemontoolsをインストールするとそのままでは自動起動しない。 | 技術系メモ
)を参考にさせてもらったのですが、なぜか起動してくれない。。。


インフラエンジニアのくせに全くログを見ようとしていなかった私、、、本当にダメですね。まずログを見よ。
という訳で、ログを見てみると

init: svscan main process (3573) terminated with status 126


exit code 126。。。ファイルが実行できませんという事らしい。(参照: シェルリファレンス
なぜ?シェルから直接実行すれば問題ないのに、なぜ実行できないのか。daemontools の /comand 以下にあるコマンドはすべてシンボリックリンクになっている。これがなにか影響しているのではなかろうかと思って、リンク先のコマンドを直接指定するようにしたら、問題なく動作しました。


うーん、本当にこれでいいのか?(実はEnfoecingのままにしてあるSELinuxのせいだったるするのかな。)


という訳で、いまのところ /etc/init/svscan.conf に設定してあるのは、以下の通り。

start on runlevel [12345]
respawn
exec /usr/bin/svscanboot

※あとで、SELinuxをDisabledにした場合にシンボリックリンクでも動作するかも確認する


上記設定後、以下のコマンドを実行すればOSの再起動をせずとも起動できる。

# initctl reload-configuration
# initctl start svscan


これにて無事にdaemontoolsを動かすことが出来ました。


次はようやく、CloudForecast を daemontools の管理下で動作させる方法です。


(即追記)
/command/svscanboot を指定した場合に、実行できないエラーが出ていたのはやはりSELinuxが起因していました。本当はちゃんと原因を調べて対応できるようにならないとダメなのですが、今回は目的から外れるのでDisabledにすることで対応しました。

その他、SELinuxが有効になっていると、multilogのあたりでもエラーが出て、サービスが起動しないといったことも発生するので、SELinuxを使いこなせるレベルではない私のような低レベルエンジニアは素直にDisabledにするのがいいでしょう。