背景
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がログインをオンにした直後にデスクトップコンピューターでPuTTYを起動すると、すぐに表示されないことに気付きました。だから私はチェックしました
$ systemd-analyze plot > output.svg
結果は
質問
サービスがnetwork-online.target
の後に開始されていないようですが、ここで何が問題になっていて、どうすれば修正できますか?
Systemdディレクティブに関する質問がある場合は、man systemd.directives
を使用して、ドキュメント化されている場所を見つけることができます。この場合は、After=
がman systemd.unit
に記述されていることを示しています。
そのファイルでは、After=
ディレクティブが[[UNIT] SECTION OPTIONS]にリストされており、ファイルの[Unit]
セクションに属していることを示しています。
同じドキュメントには[INSTALL]セクションのオプションも記載されており、After=
はそこにはリストされていません。
つまり、After=
ディレクティブはユニットファイルの間違った場所にあったため、正しい場所に移動するまで効果がありませんでした。
サービスを次のように変更して修正してください
[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
それでも私が何をしているのか完全には理解できませんでしたが、今はうまくいきます。誰か説明していただけますか?
更新
この回答は、受け入れられた回答が来る前に自分で作成したものです。