特定のディレクトリに継続的にダウンロードされるファイルを処理するために、スクリプトベースのツールをどのように実行できますか?私は遅延を最小限にしたい(約1秒ほど)、スクリプトは独自の無限ループを持つことができます。
私はいくつかの方法を知っています。
- マイスクリプトを使用
.bashrc
または呼び出して自動的にユーザーにログインする.profile
- cronでスクリプトをフォークし、すでに実行されている場合は無視します。
- どういうわけか初期化スクリプトを使用してください(ディストリビューションごとに異なると思います)
どの方法が最も効果的ですか?
答え1
どういうわけか初期化スクリプトを使用してください(ディストリビューションごとに異なると思います)
もちろん。以下は、System 5rc
スクリプトをまったく含まない体系的な方法です。これは2つの単位です。カプセル化されていない非システム単位であるため、挿入されます/etc/systemd/system
。最初はサービスユニットプログラムをデーモンとして実行する方法を説明します。
# /etc/systemd/system/example-spooler.service [単位] 説明=/var/spool/example/のプロセスファイル ドキュメント=http://unix.stackexchange.com/questions/203637/ [提供する] ExecStart=/usr/local/bin/example-spooler /var/spool/example/
このサービスを明示的に開始または停止する必要はありません。これはパスを有効にする。これパス単位systemd モニター・パスと検索する 2 番目のユニット・ファイルを記述します。
# /etc/systemd/system/example-spooler.path [単位] Description=/var/spool/example/ を監視し、example-spooler.service を有効にします。 ドキュメント=http://unix.stackexchange.com/questions/203637/ 【小道】 DirectoryNotEmpty=/var/spool/example/ [インストールする] WantedBy =マルチユーザー。ターゲット
起動時に自動的に起動するには、を実行しますsystemctl preset example-spooler.path
。すぐに起動するには、を実行してくださいsystemctl start example-spooler.path
。
追加読書
- レナート・ペトリング(2013-10-07)。
systemd.path
。システムのマニュアルページ。 freedesktop.org.
答え2
スクリプトが Linux で実行されていると仮定すると、次のようになります。inotify待つ初期化スクリプトで。完全なダウンロードツリーで再帰検索を実行する必要があるかもしれません(オプション-r
)。監視する各ノードを覚えておいてください。最大1kBのカーネルメモリを占有できます。。
主な利点inotifyこれは、高価なポーリングループを防ぐためです。監視対象のディレクトリツリーでファイル操作が発生するたびにイベントをトリガーします。それ以外の場合、CPU リソースはほとんど消費されません。