第20章 NetworkManager で dispatcher スクリプトを使用して dhclient の終了フックを実行する

NetworkManager の dispatcher スクリプトを使用して、dhclient の終了フックを実行できます。

20.1. NetworkManager の dispatcher スクリプトの概念

NetworkManager-dispatcher サービスは、ネットワークイベントが発生した場合に、ユーザーが提供したスクリプトをアルファベット順に実行します。通常、これらのスクリプトはシェルスクリプトですが、任意の実行可能スクリプトまたはアプリケーションにすることができます。たとえば、dispatcher スクリプトを使用して、NetworkManager では管理できないネットワーク関連の設定を調整できます。

dispatcher スクリプトは、以下のディレクトリーに保存できます。

  • /etc/NetworkManager/dispatcher.d/:root ユーザーが変更できるディスパッチャースクリプトの全般的な場所。
  • /usr/lib/NetworkManager/dispatcher.d/:事前にデプロイされた不変のディスパッチャースクリプト用。

セキュリティー上の理由から、NetworkManager-dispatcher では、以下の条件が満たされた場合にのみスクリプトを実行します。

  • このスクリプトは、root ユーザーが所有します。
  • このスクリプトは、root でのみ読み取りと書き込みが可能です。
  • setuid ビットはスクリプトに設定されていません。

NetworkManager-dispatcher サービスは、2 つの引数を指定して、それぞれのスクリプトを実行します。

  1. 操作が発生したデバイスのインターフェイス名。
  2. インターフェイスがアクティブになったときの動作 (up など)。

NetworkManager(8) の man ページの Dispatcher scripts セクションには、スクリプトで使用できるアクションと環境変数の概要が記載されています。

NetworkManager-dispatcher サービスは、一度に 1 つのスクリプトを実行しますが、NetworkManager のメインプロセスとは非同期に実行します。スクリプトがキューに入れられている場合、後のイベントによってスクリプトが廃止された場合でも、サービスは常にスクリプトを実行することに注意してください。ただし、NetworkManager-dispatcher サービスは、以前のスクリプトの終了を待たずに、/etc/NetworkManager/dispatcher.d/no-wait.d/ 内のファイルを参照するシンボリックリンクであるスクリプトを即座に、そして並行して実行します。

関連情報

  • NetworkManager(8) man ページ