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

パスユニットの簡単な紹介

今日のsystemd ユニットファイルのコレクションから各デーモンの初期化構成を読み取ります 、しばしば単にユニットと呼ばれます 。 パスユニットを使用 、特定のイベントについてファイルとディレクトリを監視できます。指定されたイベントが発生した場合、サービスユニット が実行され、通常はパスユニットと同じ名前が付けられます。これがどのように機能するかを簡単な例で示します。

ファイルを監視したいとします。書き込み後にファイルを閉じるときはいつでも、特定のスクリプトを開始する必要があります。

パスユニット:example.path

ディレクトリ/etc/systemd/system/ ファイルexample.pathを作成します 次の内容で:

[Unit]
Description=Monitor the file for changes

[Path]
PathChanged=/home/john/testfile
Unit=example.service

[Install]
WantedBy=multi-user.target

[Path]内 セクション、PathChanged= Unit=の場合、監視するファイルへの絶対パスを指定します ファイルが変更された場合に実行するサービスユニットを示します。このユニット(example.path )システムがマルチユーザーモードのときに開始する必要があります。

次に、対応するサービスユニットexample.serviceを作成します /etc/systemd/system/にあります 。

サービスユニット:example.service

ファイルtestfileの場合 変更(書き込みとクローズの両方を意味します)すると、次のサービスユニットが呼び出され、指定されたスクリプトが実行されます。

[Unit]
Description=Executes script when a file has changed.

[Service]
Type=simple
ExecStart=/home/john/script.sh

[Install]
WantedBy=multi-user.target

この例では、ファイルscript.sh 次のコードのみが含まれています:

#!/bin/bash
echo "file changed" >/home/john/output.txt

パスユニットをテストするには、これらの新しいユニットの両方をアクティブ化する必要があるため、次を実行します。

$ sudo systemctl enable example.{path,service}
$ sudo systemctl start example.path

ここで、ファイルtestfileを書き換える、または書き込む場合 、対応するサービスユニットが実行され、ファイルoutput.txt ユーザーjohnで作成されます のホームディレクトリ。

次の不完全で網羅的ではないリストは、パスユニットによってSysadminDayが少し簡単になる例を示しています。

  • イベント駆動型のデータ処理を開始します。
  • /etcの下のファイルを監視する 、変更が発生したときに通知を送信します。
  • importを監視します 新しいファイル用のフォルダを作成し、処理を開始します。
注意事項

パスユニットを使用したテスト中に、特定の状況ですべてのイベントがキャッチされるわけではないことに気付きました。たとえば、パスユニットを設定してパスの変更を監視してから、次のコマンドを実行します。

$ touch /path/file && rm /path/file

ここでは、サービスユニットが2回実行されることを期待しています。1回目はtouch コマンド、およびrmの2回目 指図。この問題が設計によるものなのか、修正可能な不具合によるものなのかを確認するために、Bugzillaレポートを提出しました。

ソースと関連リンク

systemdについて詳しく知りたい場合 パスユニットとサービスユニットを含むユニットについては、次のマニュアルページを参照してください。

  • systemd.unit(5)
  • systemd.path(5)
  • systemd.service(5)

また、私のバグレポートの結果に興味がある場合は、ここでフォローできます:

バグ1722627-パスユニットがすべてのイベントをキャッチしない


Linux
  1. systemctlコマンドを使用してsystemdユニットを管理する

  2. 起動時にsystemdユニットを管理する方法

  3. diffコマンドの概要

  1. GNUAutotoolsの紹介

  2. Cプログラミング言語-はじめに

  3. iptablesの紹介

  1. viエディターの紹介

  2. Linuxシステム管理のためのAnsibleの役割の簡単な紹介

  3. 既知のパスにある名前不明のディレクトリへのCd?