到着時に特定のディレクトリに継続的にダウンロードされたファイルを処理するスクリプトベースのツールを実行するにはどうすればよいですか?遅延を最小限に抑えたいのですが(約1秒で問題ありません)、スクリプトは独自の無限ループを持つことができます。
私は次のようないくつかの方法を知っています:
.bashrc
または.profile
を使用してスクリプトを呼び出す自動ログインユーザーどの方法が最も効果的ですか?
スクリプトがLinuxで実行されると仮定すると、initスクリプトから inotifywait を使用できます。ダウンロードツリー全体を再帰的に検索することをお勧めします(オプション-r
)。監視する各ノード 最大1kBのカーネルメモリを消費する可能性がある であることに注意してください。
inotifyの主な利点は、コストのかかるポーリングループを防ぐことです。監視対象のディレクトリツリーでファイル操作が行われるとすぐにイベントがトリガーされ、それ以外の場合は目立たないCPUリソースが消費されます。
どういうわけかinitスクリプトを使用します(ディストリビューションによって異なると思います)
確かにそうです。これがsystemdの方法で、System 5 rc
スクリプトはまったく含まれていません。 2台です。それらは非パッケージ非システムユニットであるため、/etc/systemd/system
に入ります。 1つ目は、プログラムをデーモンとして実行することを説明するサービスユニットです。
#/ etc/systemd/system/example-spooler.service [Unit] Description =/var/spool/example/[内のファイルを処理します。 ____。] Documentation = http://unix.stackexchange.com/questions/203637/ [Service] ExecStart =/usr/local/bin/example-spooler/var/pool/example /
このサービスを明示的に開始または停止する必要はないことに注意してください。 パスがアクティブ化されています。 systemdが監視するパスとそれが探すパスを記述するpath unitは、2番目のユニットファイルです。
#/ etc/systemd/system/example-spooler.path [Unit] Description =/var/spool/example /を監視してexample-をアクティブ化するscroller.service Documentation = http://unix.stackexchange.com/questions/203637/ [Path] DirectoryNotEmpty=/var/spool/example/ [インストール] WantedBy = multi-user.target
ブートストラップでこれを自動開始するには、systemctl preset example-spooler.path
を実行します。今すぐ開始するには、systemctl start example-spooler.path
を実行します。
systemd.path
。 systemdのマニュアルページ。 freedesktop.org。