背景
私は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=
ディレクティブがユニットファイルの間違った場所にあるため、正しい位置に移動するまでディレクティブは適用されません。
答え2
サービスを次のように修正して問題を解決しました。
[Unit]
Description=Turn on LED after SSH is ready
After=network-online.target
[Service]
Type=idle
ExecStart=/usr/bin/sshready.py
[Install]
WantedBy=network-online.target
まだ私がしていることを完全に理解していませんが、今はうまくいきます。誰でもこれを説明できますか?
修正する
この回答は、許可された回答が表示される前に直接作成されました。