systemdで確実にネットワークの起動後にサービスを起動させたい場合のメモ

systemdでネットワークが完全に立ち上がってからサービスを動かしたい場合のめもです。ありますよね、こういうケース。 で、Unitセクションにこんな感じで書くんですがこれだと上手く動かない場合があったりして困るわけです。

After=network.target

そんな時に使えるのがsystemd-networkd-wait-onlineです。これを使うと確実にネットワークの起動後にサービスを起動できるようにできます。 使い方は簡単で、systemd-networkdとsystemd-networkd-wait-onlineをenableにするだけです。ようは↓ですね。

# systemctl enable systemd-networkd
# systemctl enable systemd-networkd-wait-online

基本的にこれで問題ないはずですが、もしこれで上手く動かない場合は.service側を修正すればイケると思います。うちのラズパイで動かしているproxyサーバprivoxyさんが上記だけだと上手く動かなかったんですね。デスクトップでローカルに動かしているprivoxyサーバは上記だけで問題なかったんだけど・・・
修正前にsystemctl disable [service name]しておきましょう。そして、変更が終わったらenableですね。

修正と行っても下記のようにAfter=とWantedBy=の2箇所をnetwork-online.targetに変えるだけです。

[Unit]
After=network-online.target

[Service]
Do something

[Install]
WantedBy=network-online.target

P.S.
systemd-networkdですが、ntpの代わりにsystemd-timesyncdを使う場合にもこれが必要になります。

プロのための Linuxシステム構築・運用技術 (Software Design plus)

プロのための Linuxシステム構築・運用技術 (Software Design plus)