GNU/Linux >> Linux の 問題 >  >> Linux

systemd ユーザー サービスをシステム ターゲットに依存させる

インターネットへのアクセスが必要なユーザーランド バックアップ スクリプトで、同じ問題が発生していました。 ~/.config/systemd/user/wait-for-network.service を追加して解決しました google.com を ping するだけです 到達可能になるまで:

[Unit]
Description=Ping a server on the internet until it becomes reachable

[Service]
Type=oneshot
ExecStart=/bin/bash -c 'while ! ping -c1 google.com; do sleep 1; done'
TimeoutStartSec=60s

次に、バックアップ スクリプトを次のように依存させました。

[Unit]
Description=...
Requires=wait-for-network.service
After=wait-for-network.service

これは、 NetworkManager を使用するかどうかに関係なく機能します または接続を確立するための他の手段。


network.target は忘れてください . man systemd.special 言います:

network.target
       systemd automatically adds dependencies of type After for
       this target unit to all SysV init script service units
       with an LSB header referring to the $network facility.

したがって、このターゲットは主に SysV init スクリプトの互換性ハックです。

ネットワーク接続が NetworkManager によって処理されていると仮定すると、NetworkManager.service であるため、このターゲットに依存するのは当然のことです。 Before=network.target を定義 .ただし、これは NetworkManager が開始されたことを意味するだけであり、ネットワーク接続が実際に確立されたことを意味するわけではありません。これにはしばらく時間がかかる場合があり (dhcp ラウンドトリップ、wifi ハンドシェイクなど)、これは完全に NetworkManager の仕事です。少なくとも私のシステム (F18) には NetworkManager-wait-online というサービスがあります . nm-online を使用します アクティブな接続が確立されるまでブロックするユーティリティ プログラム。 Require, Before してみてください ユニット定義でそれを使用するか、そのツールを単独で使用してください。


Linux
  1. Linux OS サービス「winbind」

  2. systemd - サービスに複数の引数を与える

  3. シャットダウン直前にsystemdでスクリプトを実行する方法は?

  1. systemd ソケットのアクティベーションと xinetd

  2. Systemd の依存関係と起動順序

  3. systemd:特定のサービスを変更する権限を非特権ユーザーに付与する

  1. LinuxでSystemdサービスを作成する方法

  2. Linuxsystemdに新しいサービスを追加する

  3. 一連のSystemdサービスファイルのユーザーを変更するにはどうすればよいですか?