[CentOS7][Systemd] CentOS7 環境でsystemdスクリプトを利用してネットワーク関連のサービスを実行すると起動時にエラーが出るときの対処方法。その2

AIX、UNIX、Linux

先ほどは上記のような記事を書いたのですが、更に確認してみると確実にネットワークインターフェースが起動してから、サービス自体も起動してくるとは言えないものでした。お詫びいたします。
というのも相変わらずinterface のアドレスにbindできないというエラーが発生していることを確認しました。

で、さらに調査を続けてみたところ、これかなぁという部分を見つけたのでメモしておきます。

systemd - ArchWiki

ここに依存関係の項目があるのですが、最初は[Unit]セクションのAfterに以下の様な記述をしていました。

After=syslog.target network.target sys-subsystem-net-devices-eth0.device

このサービスの場合、起動前に、syslog.target network.target sys-subsystem-net-devices-eth0.deviceを必要としているという記述なのですが、まず問題になったのは、CentOS7ではsyslog.targetが存在しないという問題です。

これについては調査してみたのですが、明確な記事が見当たらずRHEL7やFedora20ではどうなっているのか疑問です。

逆にこのtargetファイルがあれば正常に起動するのでしょうが、残念ながらCentOS7にはありません。また含んでいるようなパッケージも見当たりませんでした。

次にnetwork.targetですが、これは以下の記事が詳しいのですが、ネットワーク関連の機能を一括して管理しているファイルで、これは起動時にUnboundやNSD4が起動要求するので無いと困ると思っていました。

NetworkTarget /
http://www.freedesktop.org/wiki/Software/systemd/NetworkTarget/

次にsys-subsystem-net-devices-eth0.deviceですが、これは下記からの情報です。

systemd service delay / System Administration / Arch Linux Forums

直接必要としているネットワークインターフェースデバイスを指定するものです。これを指定することでInterfaceが起動していることをサービスに知らせることが出来るかと思ったのですが、結果から言うとうまくいきませんでした。

で、最初に戻ってsystemdのドキュメントを読むとRequiresという必ず必要、と読めるオプション句があったので、そちらを使って以下のように記述してみました。

Requires=NetworkManager-wait-online.service

何故これを選んだかというと、サービスの起動順を調べてみたところ、以下の様な感じで最後の方に呼ばれるサービスだったためです。

systemd-analyze blame
8.068s mackerel-agent.service
5.175s NetworkManager-wait-online.service
1.207s network.service
<snip>

で実践してみたのですが、やはり起動時にInterfaceにbindしてくれずに途方にくれていました。

で、最後の手段として以下の様な記述に変更してみました。

After=NetworkManager-wait-online.service

こちらで起動時にサービスがネットワークインターフェースの起動後に起動してくるか確認したところ、正常に起動してくることを確認しました。
またインターフェースをbindする必要があるNSD4やdibblerなどでも同様に、問題が解決することを確認しました。

結果からすると正常に起動するようになったのですが、systemdの[Unit]セクションについては、まだ良くわからないところが多いです。
今回も何故network.targetを指定していないのに、ネットワークインターフェースの起動後にサービスが正常に起動してくる因果関係が良く分かりません。

この辺りは引き続き調査していこうと思います。

この記事を書いた人

kometchtech

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

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