tom*_*ash 5 startup monitoring shell-script files daemon
如何运行基于脚本的工具,该工具将在文件到达时处理连续下载到给定目录的文件?我想尽量减少延迟(~1 秒就可以了),脚本可以有自己的无限循环。
我知道几种方法,例如:
.bashrc
或.profile
调用我的脚本的自动登录用户什么方法最有效?
Jde*_*eBP 12
以某种方式使用 init 脚本(我猜它因发行版而异)
确实如此。这是 systemd 方式,它根本不涉及 System 5rc
脚本。是两个单位。因为它们是非封装非系统单元,所以它们进入/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 监控的路径及其查找内容的路径单元是第二个单元文件:
# /etc/systemd/system/example-spooler.path [单元] Description=Watch /var/spool/example/ 并激活 example-spooler.service 文档=http://unix.stackexchange.com/questions/203637/ [小路] DirectoryNotEmpty=/var/spool/example/ [安装] WantedBy=multi-user.target
要在引导时自动启动它,请运行systemctl preset example-spooler.path
. 要立即启动,请运行systemctl start example-spooler.path
。
systemd.path
. systemd 手册页。freedesktop.org。小智 2
假设您的脚本在 Linux 下运行,您可以在 init 脚本中使用inotifywait 。您可能需要对整个下载树进行递归搜索(选项-r
)。请记住,每个要监视的节点最多可以占用 1kB 的内核内存。
inotify的主要优点是防止代价高昂的轮询循环。一旦受监视的目录树中发生文件操作,它就会触发事件,否则会消耗不明显的 CPU 资源。