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

Debian8でIncronを使用してファイル/ディレクトリの変更でコマンドをトリガーする方法

このガイドでは、Debian 8(Jessie)システムにincronをインストールして使用する方法を示します。 Incronはcronに似ていますが、時間に基づいてコマンドを実行する代わりに、ファイルまたはディレクトリのイベント(ファイルの変更、権限の変更など)が発生したときにコマンドをトリガーできます。

1の前提条件

  • システム管理者権限(rootログイン)。このチュートリアルのすべてのコマンドは、シェルでrootユーザーとして実行する必要があります。
  • エディタ「nano」を使用してファイルを編集します。サーバーにインストールされていない場合は、nanoを任意のエディターに置き換えるか、nanoを「apt-getinstallnano」にインストールできます。

2Incronのインストール

IncronはDebianリポジトリで利用できるため、次のaptコマンドを使用してincronをインストールします。

 apt-get install incron 

インストールプロセスは、このスクリーンショットのプロセスと同様である必要があります。

3Incronの使用

cronの使用法はcronの使用法と非常によく似ています。 incrontabコマンドを使用して、incrontabエントリの一覧表示(-l)、編集(-e)、および削除(-r)を行うことができます。

詳細については、以下を参照してください:

 man incrontab 

そこには次のセクションもあります:

/etc/incron.allowが存在する場合、ここにリストされているユーザーのみがincronを使用できます。それ以外の場合、/ etc / incron.denyが存在する場合、ここにリストされていないユーザーのみがincronを使用できます。これらのファイルが存在しない場合、誰もがincronを使用できます。 (重要な注意:この動作は安全ではなく、ISC Cronで使用されるスタイルと互換性があるように変更される可能性があります。)これらのファイルの場所は、構成で変更できます。

つまり、ルートとしてincrontabを使用する場合は、/ etc / incron.allowを削除する必要があります(これは、すべてのシステムユーザーがincrontabを使用できるため安全ではありません)...

 rm -f /etc/incron.allow 

...またはそのファイルにrootを追加します(推奨)。 nanoで/etc/incron.allowファイルを開きます:

 nano /etc/incron.allow 

そして、次の行を追加します。次に、ファイルを保存します。

 root 

これを行う前に、incrontabを使用しようとすると、次のようなエラーメッセージが表示されます。

 server1:〜#incrontab -l <​​br /> user'root'はincronの使用を許可されていません
server1:〜#

その後は機能します:

 server1:〜#incrontab -l <​​br />rootのテーブルがありません
server1:〜#

次のコマンドを使用できます:

 incrontab -e 

incronジョブを作成します。これを行う前に、incronのmanページを確認します。

 man 5 incrontab 

マンページでは、cronタブの形式について説明しています。基本的にフォーマットは以下の通りです...

    

...ここで、はディレクトリ(ディレクトリおよび/またはそのディレクトリ内のファイル(そのディレクトリのサブディレクトリ内のファイルではありません!)が監視されることを意味します)またはファイルです。

は次のいずれかになります:

 IN_ACCESSファイルにアクセスしました(読み取り)(*)
IN_ATTRIBメタデータが変更されました(権限、タイムスタンプ、拡張属性など)(*)
IN_CLOSE_WRITE /> IN_CLOSE_NOWRITE書き込み用に開かれていないファイルが閉じられました(*)
IN_CREATE監視対象ディレクトリに作成されたファイル/ディレクトリ(*)
IN_DELETE DELETE * IN _ /directory自体が削除されました
IN_MODIFYファイルが変更されました(*)
IN_MOVE_SELF監視対象のファイル/ディレクトリ自体が移動されました
IN_MOVED_FROM視聴したディレクトリ(*)
IN_OPENファイルが開かれました(*)

ディレクトリを監視する場合、上記のアスタリスク(*)でマークされたイベントは、ディレクトリ内のファイルで発生する可能性があります。その場合、
返されたイベントデータの名前フィールドは、ディレクトリ内のファイルの名前を識別します。

IN_ALL_EVENTSシンボルは、上記のすべてのイベントのビットマスクとして定義されています。 2つの追加の便利なシンボルは、IN_MOVED_FROMとIN_MOVED_TOの組み合わせであるIN_MOVEと、IN_CLOSE_WRITEとIN_CLOSE_NOWRITEを組み合わせたIN_CLOSEです。

マスクには、さらに次の記号を指定できます。

IN_DONT_FOLLOWシンボリックリンクの場合はパス名を間接参照しないでください
IN_ONESHOT1つのイベントのみのパス名を監視します
IN_ONLYDIR

さらに、inotifyシンボルセットに表示されないシンボルがあります。 IN_NO_LOOPです。このシンボルは、現在のイベントが完全に処理されるまで(子プロセスが終了するまで)、イベントの監視を無効にします。

は、イベントが発生したときに実行する必要のあるコマンドです。コマンド仕様内では、次のワイルドダードを使用できます。

$$ドル記号
[メールで保護]監視対象のファイルシステムパス(上記を参照)
$#イベント関連のファイル名
$%イベントフラグ(テキスト)
$&イベントフラグ(数値)

ディレクトリを監視している場合、[email protected]はディレクトリパスと$#イベントをトリガーしたファイルを保持します。ファイルを監視している場合、[メールで保護]はファイルへの完全なパスを保持し、$#は空です。

ワイルドカードが必要であるが、それらが何に変換されるかわからない場合は、このようなincronジョブを作成できます。 incron incrontabを開きます:

 incrontab -e 

次の行を追加します:

 / tmp / IN_MODIFY echo "$$[メール保護]$#$%$&" 

次に、/ tmpディレクトリにファイルを作成または変更し、/ var / log / syslogを確認します。このログには、incronジョブがトリガーされたタイミング、成功したかエラーが発生したか、実際のコマンドは何であったかが示されます。実行されました(つまり、ワイルドカードは実際の値に置き換えられます)。

 tail / var / log / syslog 
 ... 
Sep 16 10:14:35 server1 incrond [1199]:(root)CMD(echo "$ / tmp .hello.txt.swp IN_MODIFY 2")
Sep 16 10 :14:36 server1 incrond [1199] :(ルート)CMD(echo "$ / tmp .hello.txt.swp IN_MODIFY 2")
Sep 16 10:14:39 server1 incrond [1199] :(ルート) CMD(echo "$ / tmp hello.txt IN_MODIFY 2")
Sep 16 10:14:39 server1 incrond [1199] :(ルート)CMD(echo "$ / tmp .hello.txt.swp IN_MODIFY 2" )

この例では、ファイル/tmp/hello.txtを編集しました。ご覧のとおり、[メール保護]は/ tmpに変換され、$#は hello.txtに変換されます 、$%をIN_CREATEに、$&を256に。一時的な.txt.swpファイルを作成するエディターを使用したため、syslogに追加の行が追加されました。

今では十分な理論。最初のincronジョブを作成しましょう。ファイル/etc/apache2/apache2.confとディレクトリ/etc/ apache2 / vhosts /を監視したいのですが、変更があるたびに、incronでApacheを再起動します。これが私たちのやり方です:

 incrontab -e 
 /etc/apache2/apache2.conf IN_MODIFY / usr / sbin / service apache2 restart / etc / apache2 / sites-available / IN_MODIFY / usr / sbin / service apache2 restart 

それでおしまい。テストの目的で、Apache構成を変更し、/ var / log / syslogを確認すると、incronがApacheを再起動することがわかります。

:ループを回避するために、監視しているディレクトリのincronジョブ内からアクションを実行しないでください。 例: / tmpディレクトリの変更を監視し、変更のたびに/ tmpにログファイルを書き込むスクリプトがトリガーされると、ループが発生し、システムの負荷が高くなったり、クラッシュしたりする可能性があります。

定義されているすべてのincronジョブを一覧表示するには、次のコマンドを実行できます。

 incrontab -l <​​/ pre> 
 server1:〜#incrontab -l <​​br /> /etc/apache2/apache2.conf IN_MODIFY / usr / sbin / service apache2 restart 
/ etc / apache2 / vhosts / IN_MODIFY / usr / sbin / service apache2再起動
server1:〜#

現在のユーザーのすべてのincronジョブを削除するには、次のコマンドを実行します。

 incrontab -r 
 server1:〜#incrontab -r
ユーザー'root'のテーブルを削除しています
ユーザー'root'のテーブルが正常に削除されました
server1:〜#

  • Debian http://www.debian.org
  • incron:http://inotify.aiken.cz/?section=incron&page=about&lang=en

Debian
  1. Debian 9StretchLinuxでEncFSを使用してディレクトリを暗号化する方法

  2. RkhunterでルートキットのDebianサーバーをスキャンする方法

  3. ファイルマネージャでファイルとディレクトリの権限を変更する方法

  1. DebianEtchのIncronでファイル/ディレクトリの変更に関するコマンドをトリガーする

  2. Debian10でJirafeauを使用してファイル共有Webサイトをセットアップする方法

  3. UbuntuのIncronでファイルまたはディレクトリの変更に対してコマンドを実行する方法

  1. Debian10でUFWを使用してファイアウォールを設定する方法

  2. Debian9にGoをインストールする方法

  3. debian preseed ファイルでコマンドを一緒にパイプするにはどうすればよいですか?