进一步阅读

进一步阅读

如何运行基于脚本的工具来处理连续下载到给定目录的文件?我想最小化延迟(〜1秒就可以了),脚本可以有自己的无限循环。

我知道一些方法,比如:

  • 使用.bashrc.profile调用我的脚本自动登录用户
  • 从 cron 分叉脚本,然后忽略它是否已经在运行
  • 以某种方式使用初始化脚本(我猜它在发行版之间有所不同)

什么方法最有效?

答案1

以某种方式使用初始化脚本(我猜它在发行版之间有所不同)

确实如此。这里是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

[单元]
描述=监视 /var/spool/example/ 并激活 example-spooler.service
文档=http://unix.stackexchange.com/questions/203637/

[小路]
DirectoryNotEmpty=/var/spool/example/

[安装]
WantedBy=多用户.target

要在引导时自动启动它,请运行systemctl preset example-spooler.path.要立即启动,请运行systemctl start example-spooler.path.

进一步阅读

  • 伦纳特·珀特林 (2013-10-07)。 systemd.path。 systemd 手册页。 freedesktop.org。

答案2

假设你的脚本是在Linux下运行,你可以使用inotify等待来自初始化脚本。您可能需要对整个下载树进行递归搜索(选项-r)。请记住,要监视的每个节点最多可以占用 1kB 的内核内存

主要优点inotify是为了防止代价高昂的轮询循环。一旦受监视的目录树中发生文件操作,它就会触发事件,否则会消耗不明显的 CPU 资源。

相关内容