追加読書

追加読書

特定のディレクトリに継続的にダウンロードされるファイルを処理するために、スクリプトベースのツールをどのように実行できますか?私は遅延を最小限にしたい(約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 リソースはほとんど消費されません。

関連情報