このガイドでは、 incronをインストールして使用する方法について説明します。 Debian 9(Stretch)システム。 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:〜#incrontab-l
ルートのテーブルがありません
次のコマンドを使用できます:
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...
Jan 10 13:52:35 server1 incrond [1012]:(root)CMD(echo "$ / tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13 :52:36 server1 incrond [1012] :(ルート)CMD(echo "$ / tmp .hello.txt.swp IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond [1012] :(ルート) CMD(echo "$ / tmp hello.txt IN_MODIFY 2")
Jan 10 13:52:39 server1 incrond [1012] :(ルート)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再起動
現在のユーザーのすべてのincronジョブを削除するには、次のコマンドを実行します。
incrontab -rserver1:〜#incrontab-r
ユーザー'root'のテーブルを削除しています
ユーザー'root'のテーブルが正常に削除されました
4つのリンク
- Debian http://www.debian.org
- Incronソフトウェア:http://inotify.aiken.cz/?section =incron&page =about&lang =en