incronを使用してルーチン操作をInotifyまたは自動化します

これまでは、 inotifyなどの便利なLinuxカーネルサブシステムと、システム管理者の作業の自動化におけるその使用について、誰も言及していませんでした。 このギャップを埋めたいと思います。



inotifyとは



Inotifyは、ファイルシステムへの変更の通知を受け取ることができるLinuxカーネルサブシステムです。 つまり 簡単に言えば-これは、使用されているファイルシステム内のファイルまたはディレクトリの作成または変更に関する情報を提供します。

Inotifyは、バージョン2.6.13で既にカーネルに登場し、時の試練に合格しました。 これを使用するには、いくつかのユーティリティが作成されています。そのうちの1つを使用することを検討します。





インクロン



incronは、inotifyを使用してファイルシステム内のイベントを監視し、タスクで指定されたイベントが発生したときにコマンドを実行するデーモンです。



配布キットを使用してデーモンをインストールします。 私にとってはこのように見えます:



kolvir〜#emerge incron



インストール後、デーモンを起動し、システム起動時に起動するサービスのリストに追加します。

これで、タスクを追加できます。 これは、 incrontab -eコマンドによって実行されます。 もちろん、ファイルを手動で編集することもできます...それらは/ var / spool / incrontabディレクトリにありますが、このために特別に設計されたユーティリティを使用する方が良いでしょう。

わずかな微妙さがあります。 インストール中に/etc/incron.allowファイルを作成し、ユーザー名がない場合は、そこに追加する必要があります。追加しないと、incronおよびincrontabでの作業が禁止されます。 このファイルがシステムにない場合、デフォルトですべてのユーザーにアクセスが許可されます。

そこで、アクセスの問題を解決しました。 ここでincrontab -eと入力すると、まだテキストエディターで開かれたクリーンなファイルが表示されます。これはデフォルトでシステムに登録されています。

次に、そこに書く必要があるものを説明します。



incronのcrontabファイル形式


crontab構文は、従来のcronよりもさらに単純になります。

構成の各行は次のようになります。



<パス> <イベント> <コマンド>



次に、各列に書き込む必要があるものを解読します。 パス -ここでは、監視するファイルまたはディレクトリへのフルパスを指定する必要があります。 コマンド -ここでは、イベント後に実行する必要があるスクリプトまたはコマンドを示します。 イベント -ここでは、次のタイプのイベントのいずれかを指定する必要があります。



IN_ACCESS-ファイルにアクセスしました(読み取り)

IN_ATTRIB-メタデータの変更(権利、作成/編集日、高度な属性など)

IN_CLOSE_WRITE-書き込み用に開いているファイルが閉じられました

IN_CLOSE_NOWRITE-書き込み用に開いていないファイルが閉じられました

IN_CREATE-監視対象ディレクトリに作成されたファイル/ディレクトリ

IN_DELETE-監視対象ディレクトリでファイル/ディレクトリが削除されました

IN_DELETE_SELF-追跡されたファイル/ディレクトリは削除されました

IN_MODIFY-ファイルが変更されました

IN_MOVE_SELF-追跡されたファイル/ディレクトリが移動されました

IN_MOVED_FROM-ファイルは監視対象ディレクトリから移動されました。

IN_MOVED_TO-ファイルは監視対象ディレクトリに移動されました。

IN_OPEN-ファイルが開かれました



また、チームでは、次の内部変数を使用できます(IMHOのロギングに非常に便利です)。



$$記号$

$ @監視対象(ディレクトリ)

$#作成されたファイルの名前

$%イベントフラグ(テキスト)

$およびイベントフラグ(数値)



いくつかの例


だから。 知識を武器に、自動化を開始できます。 確かに多くの人がincronで何をどのように行うことができるかを既に理解していますが、それでも残りのいくつかの例を作成します。



たとえば、ホームサーバーから取得したcrontabファイルを見てみましょう。



/etc IN_MODIFY /bin/backup

/etc/bind/pri/ IN_MODIFY rndc reload

/etc/bind/pri/named.conf IN_MODIFY /etc/init.d/named restart

/etc/apache2/ IN_MODIFY /etc/init.d/apache2 restart

/etc/squid/squid.conf IN_MODIFY /etc/init.d/squid restart

/etc/squidGuard/ IN_MODIFY /etc/init.d/squid restart

/etc/conf.d/firewall.sh IN_MODIFY /etc/conf.d/firewall.sh









最初の行で、/ etcディレクトリのファイルを変更すると、/ etcのすべての重要なファイルを保存するバックアップスクリプトが起動します。 rsyncユーティリティのおかげで、変更されたファイルのみをコピーでき、トラフィックを節約でき、チャンネルを無駄にダウンロードすることはできませんが、今ではそのことはできません=)。

次は、構成ファイルを変更するときにサービスを再起動する通常の操作です。 毎回手動で行わないのは素晴らしいことです!

最後の行では、ファイアウォール構成スクリプトが変更されている場合は起動されます。



ご覧のとおり、ここのすべては非常にシンプルで平凡ですが、メモリの安全策は何ですか?)。 特に、彼が何か他のことに熱心であるか、まだ完全に目覚めていない場合、あるいは逆に非常に疲れている場合。

私の例では、IN_MODIFYイベントのみがすべての場所で使用されていますが、他のイベントを使用する、いくぶん遠いが、まだ動作する例を与えることができます。



/mnt/samba/public/shutdown IN_CLOSE_WRITE shutdown now







ここで、共有フォルダー内で誰かがシャットダウンファイルを作成または編集した場合、コンピューターの電源を切ります。



参照資料


プログラムインターフェースとその他のユーティリティの詳細については、 ru.wikipedia.org / wiki / Inotifyまたはwww.ibm.com/developerworks/ru/library/l-ubuntu-inotifyをご覧ください



All Articles