监视指定文件/文件夹的更改并根据这些更改激发命令的守护程序

fs-watcher的Python项目详细描述


fs-watcher on PyPIfs-watcher on PyPIGitHub issues for Watcher

Overview

Watcher是监视指定文件/文件夹的更改和 根据这些更改激发命令。它类似于 incron然而,配置使用更简单的 读取ini文件而不是纯文本文件。不像印克伦,它也可以 递归地监视目录。

它是用python编写的,更容易被破解。

这个fork是使用python守护进程的PEP3143实现重写代码,并具有以下附加功能:

  • 异步命令执行,允许对单个作业同时执行多个命令副本
  • 将命令输出捕获到单独的日志文件
  • 通过正则表达式排除监视文件
  • 在成功/失败命令完成时执行操作。

Requirements

Watcher同时支持Python2.7和Python3.x。

在debian上安装依赖项:

sudo apt-get install python-pyinotify python-daemon python-lockfile python-chardet python-future
sudo apt-get install python3-pyinotify python3-daemon python3-lockfile python3-chardet python3-future

在gentoo上安装依赖项:

emerge -av dev-python/pyinotify dev-python/python-daemon dev-python/lockfile dev-python/chardet dev-python/future

pip将自动安装依赖项。

Installation

Debian

GitHub releases page下载最新的deb包,并用dpkg安装它。

sudo dpkg -i fs-watcher_X.Y.Z-0_all.deb

除了Watcher本身之外,它还将安装:

  • 示例配置文件到/etc/watcher.ini
  • systemd服务fs-watcher(处于禁用状态)。

若要开始使用Watcher,必须更改/etc/watcher.ini以满足您的需要,并启用/启动fs-watcher服务。

Pip

全系统使用pip

sudo pip install fs-watcher
sudo pip3 install fs-watcher

此命令将安装:

  • 用于Watcher
  • 的python模块
  • 配置文件示例
  • 启动脚本示例
  • 启动Watcher
  • 的可执行文件

使用以下命令检查准确位置:

pip show -f fs-watcher

有一些启动脚本的示例。使用init系统手册正确安装它们。在使用前检查/修复示例中可执行文件Watcher的路径,默认情况下假定为/usr/sbin/watcher

对于systemd:

cp share/init/fs-watcher.service /etc/systemd/system/fs-watcher.service
systemctl daemon-reload
systemctl enable fs-watcher
systemctl start fs-watcher

对于Sysv:

cp share/init/fs-watcher.sysvinit /etc/init.d/fs-watcher
update-rc.d fs-watcher defaults
/etc/init.d/fs-watcher start

对于OpenRC:

cp share/init/fs-watcher.openrc /etc/init.d/fs-watcher
rc-update add fs-watcher default
/etc/init.d/fs-watcher start

Configuration

检查提供的watcher.ini文件以获取示例作业配置。配置文件应该位于/etc/watcher.ini~/.watcher.ini中。还可以使用--config选项将配置文件的路径指定为命令行参数。

如果编辑ini文件,则必须重新启动守护程序才能重新加载配置。

Usage

usage: watcher [-h] [--version] [-c CONFIG] [-v] {start,stop,restart,debug}

positional arguments:
  {start,stop,restart,debug}
                                                What to do.

optional arguments:
  -h, --help            show this help message and exit
  --version             show program's version number and exit
  -c CONFIG, --config CONFIG
                                                Path to the config file (default: None)
  -v, --verbose         verbose output

Debug mode

您可以用debug位置参数启动Watcher,以防止它分叉到后台并将消息记录到stdout:

watcher debug

Increasing the amount of inotify watchers

inotify观察程序的最大数量是有限制的。如果此限制不足以监视所有作业,则必须增加该限制,Watcher才能正常工作。当面对此限制时,您可以在日志中找到以下错误:

add_watch: cannot watch /...... WD=-1, Errno=No space left on device (ENOSPC)

如果您运行的是debian、redhat或其他类似的linux发行版,请在终端中运行以下命令以增加此限制:

echo fs.inotify.max_user_watches=524288| sudo tee -a /etc/sysctl.conf && sudo sysctl -p

Increasing the amount of queued events

有最大排队事件数的限制。如果此限制不足以监视所有作业,则必须增加该限制,Watcher才能正常工作。面对此限制时,您可以在日志中找到以下警告:

pyinotify - WARNING - Event queue overflowed.

如果您运行的是debian、redhat或其他类似的linux分配,在终端中运行以下命令以增加此限制:

echo fs.inotify.max_queued_events=65536| sudo tee -a /etc/sysctl.conf && sudo sysctl -p

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java什么构造使私有serialversionUID有用?   java如何向JSP发送参数并在Spring MVC中更新   java测试Glassfish启动行为   java需要多应用程序IPC的一些指导   java从SQLite检索随机数据   java Apache Flink:NoSuchMethodError在提交Flink作业时出错   java为什么两个具有相同PK的插入成功?如何更新重复密钥?   java输出总是输出else语句   pdfbox Java从PDF文件中提取非重复单词   java For相同的api gson正在工作,但jackson无法解析repsonse,从而向变量返回空值   java从TestNG迁移到JUnit4,处理junitparams@Parameters注释所需的静态方法   java Hibernate检索不带Blob字节数组的文件列表[]   base64 Java加密:Java加密:javax。加密。IllegalBlockSizeException:使用填充密码解密时,输入长度必须是8的倍数   java如何检查文件的扫描程序内容并使用它们分配输入,而不使用nextLine跳过数据?   java TestNG Eclipse插件:如何更改[New>TestNG类]方法的名称前缀?   将信息读入数组时的java格式问题   java获取jsp会话中存储的对象的属性   java如何获取由特定字符集的一系列ASCII值表示的字符?   java如何以编程方式使会话无效?   SpringMVC中的JavaJSON读取JSON数据,在jsp中解析并呈现它