Systemd:ネットワークが完全に接続された後にsystemdサービスを開始する方法は?

Systemd:ネットワークが完全に接続された後にsystemdサービスを開始する方法は?

背景

私はRaspberry Pi 2のRaspbainで実行する簡単なスクリプトを書いています。このスクリプトは、LEDを点灯してデスクトップコンピュータでSSHを実行する準備ができていることを示します。

ここではスクリプトは重要ではありません。周波数制御を使用しているので、スクリプトがLEDを頻繁にオン/オフするために無限ループで実行されることに注意してください。簡単なサービスの例です。しかし、少なくともこの質問への回答タイプをアイドルに設定することをお勧めします。私のサービスファイルは次のとおりです。

[Unit]
Description=Turn on LED after SSH is ready

[Service]
Type=idle
ExecStart=/usr/bin/sshready.py

[Install]
Wants=network-online.target
After=network-online.target

影響

サービスが期待どおりに実行されます。ところで、デスクトップコンピュータでパテを起動したときにLEDが点灯した直後にログインプロンプトが表示されないことがわかりました。だから確認してみた

$ systemd-analyze plot > output.svg

結果を示す

ここに画像の説明を入力してください。

質問

私のサービスは後で開始されないようですnetwork-online.target。ここで何が間違っていて、どのように解決できますか?

ベストアンサー1

systemdディレクティブが疑わしい場合は、それを使用して、man systemd.directivesそのディレクティブがどこに記録されているかを判断できます。この場合はAfter=man systemd.unit

ファイル内のディレクティブが「[UNIT] SECTION OPTIONS」にリストされており、そのディレクティブがファイルのセクションAfter=に属していることを示します。[Unit]

同じ文書にはいくつかの[INSTALL]オプションも記載されていますが、After=ここには記載されていません。

つまり、After=ディレクティブがユニットファイルの間違った場所にあるため、正しい位置に移動するまでディレクティブは適用されません。

おすすめ記事