【AIによる回答】
Linuxでファイルが更新されたら自動実行するには、inotifyツール(inotifywait)やsystemdのpathユニット、incron(cronのファイルシステム版)などの方法があり、Rocky Linux(RHEL系)でも利用可能で、特定のファイルやディレクトリの変更を監視し、変更を検知したら指定のスクリプトやコマンドを実行できます。最も手軽なのはinotify-toolsのinotifywaitで、スクリプトと組み合わせるのが一般的です。1.inotify-toolsを使う方法(推奨)inotifywaitコマンドは、ファイルの変更をリアルタイムで監視し、変更を検知すると指定したアクションを実行できます。
- インストール:
bashsudo dnf install inotify-tools- 監視スクリプトの作成(例:
watch_and_run.sh):bash#!/bin/bash # 監視するファイル TARGET_FILE="/path/to/your/file.txt" # 実行するコマンド/スクリプト COMMAND_TO_RUN="/path/to/your/script.sh" echo "監視を開始します: $TARGET_FILE" # inotifywaitで変更を監視し、何らかのイベント(modify, create, deleteなど)が発生したらループ inotifywait -m "$TARGET_FILE" -e modify,create,delete,move | while read -r directory events filename; do echo "ファイル '$filename' が $events されました。コマンドを実行します..." # 実行するコマンドをここに記述 $COMMAND_TO_RUN echo "コマンド実行完了。" done- 実行可能にする:
bashchmod +x watch_and_run.sh- 実行:
bash./watch_and_run.sh & # バックグラウンドで実行2. systemd Path Unitを使う方法(より堅牢)systemdのPathユニットは、inotifyの機能を利用しつつ、サービスの起動・停止管理と統合されており、よりシステム管理向きです。
.pathファイル作成(例:/etc/systemd/system/my-file-watcher.path):ini[Unit] Description=Watch for file changes [Path] PathExists=/path/to/your/file.txt PathModified=/path/to/your/file.txt # PathExistsChanged=/path/to/your/directory/ # ディレクトリ全体を監視する場合 [Install] WantedBy=multi-user.target.serviceファイル作成(例:/etc/systemd/system/my-file-watcher.service):ini[Unit] Description=Run script on file change [Service] Type=oneshot ExecStart=/path/to/your/script.sh # 実行したいコマンドやスクリプト- 有効化・起動:
bashsudo systemctl daemon-reload sudo systemctl enable my-file-watcher.path sudo systemctl start my-file-watcher.path3. incronを使う方法cronのようにスケジュールでなく、ファイル変更をトリガーに実行したい場合に便利です。
- インストール:
inotify-toolsがインストールされていれば、incronも利用できることが多いです。- 設定:
incrontab -eで設定ファイルを開き、inotifywaitと同じようなルールを記述します(例:/path/to/your/file.txt IN_MODIFY /path/to/your/script.sh)。これらの方法で、Rocky Linux上でファイルの更新をトリガーに自動でコマンドやスクリプトを実行できます。用途に応じて適切な方法を選びましょう。
Rocky Linuxでファイルが更新された際に特定のコマンドを実行するには、主にinotify-toolsパッケージに含まれる**inotifywaitコマンドを使用する方法や、entr**というユーティリティを使用する方法があります。方法1:inotifywaitを使用する(推奨)inotifywaitはLinuxカーネルのinotifyサブシステムを利用し、ファイルシステムのイベントを効率的に監視します。
inotify-toolsのインストール:
Rocky Linuxでは、以下のコマンドでパッケージをインストールできます。bashsudo dnf install inotify-toolsコードは注意してご使用ください。- ファイル更新時にコマンドを実行するスクリプトの例:
以下のシェルスクリプトは、指定したファイルが変更(modify,create,deleteなど)されたときにyour_command_hereを実行します。bash#!/bin/bash FILE_TO_WATCH="/path/to/your/file.txt" COMMAND_TO_RUN="your_command_here" # 例: echo "ファイルが更新されました" echo "監視を開始します: $FILE_TO_WATCH" # -m: 常時監視を続ける, -e modify: modifyイベントを監視 inotifywait -m -e modify "$FILE_TO_WATCH" | while read path action file; do echo "イベント検出: $file は $action されました" # ここで実行したいコマンドを記述 $COMMAND_TO_RUN doneコードは注意してご使用ください。このスクリプトを
watch_file.shとして保存し、chmod +x watch_file.shで実行権限を与えてから実行します。方法2:entrを使用するentrは、ファイルリストをパイプで渡すだけで簡単に監視・実行ができるシンプルなツールです。開発環境などでの利用に適しています。
entrのインストール:
デフォルトのリポジトリにはない場合があるため、EPELリポジトリの有効化が必要かもしれません。bash# EPELリポジトリの有効化(必要な場合) sudo dnf install epel-release # entrのインストール sudo dnf install entrコードは注意してご使用ください。- ファイル更新時にコマンドを実行する例:
監視したいファイルをリストアップしてentrにパイプで渡し、-sオプションで実行したいコマンド(シェルスクリプト)を指定します。bashecho /path/to/your/file.txt | entr -s 'your_command_here'コードは注意してご使用ください。ディレクトリ内のすべてのファイルを再帰的に監視したい場合は、
findコマンドと組み合わせます。bashfind /path/to/your/directory -type f | entr -s 'your_command_here'コードは注意してご使用ください。
これらの方法により、Rocky Linux環境でファイルの更新をトリガーにして自動的に処理を実行できます。
