在命令输出时触发事件或通知。
triggerd的Python项目详细描述
triggerd是一个系统管理/自动化工具,用于在命令输出时触发事件或通知。
将创建包含触发条件的事件文件。理想情况下,您将创建一个cron条目或systemd计时器,以定期执行triggerd EVENTFOLDER。如果命令状态或输出与触发条件匹配,则执行触发事件或通知,并将事件文件标记为已触发。
triggerd非常适合查询网页以匹配文本或任何类型的内容我最初创建它是为了与urlwatch的修改版本一起使用,以便在网页发生某些更改时通知我,但是潜在的用途是无限的
在用python重写之前,该脚本最初是作为bash shell脚本编写的。Bash版本几乎相同,如果您的环境中没有Python 3,那么Bash版本是一个很好的选择它包含在这个存储库的scripts/triggerd.sh下。
安装
安装triggerd的最简单方法是通过pip:
pip3 install --user triggerd
仅供参考:triggerd的shell版本将作为triggerd.sh安装到本地bin文件夹中
更新
运行以下命令更新到最新版本:
pip3 install --upgrade --user triggerd
用法
triggerd是通过名为event files的配置文件控制的您可以按如下方式执行:
triggerd FILE1 FILE2 FILE3...
或者针对事件文件的整个目录:
triggerd EVENTFOLDER1 EVENTFOLDER2...
您可以在不实际执行事件文件配置的情况下对其进行测试:
triggerd --verify FILE
–verbose选项可用于显示执行详细信息:
triggerd --verbose FILE
事件文件
请注意:事件文件是手动解析的,它们不是shell的“源”。内容由shell执行,与它们显示的完全一样
基本文档(示例事件文件和触发器模板文件)安装到$prefix/share/triggerd/examples
以下是当google.com无法通过curl访问时触发的示例事件文件:
COMMAND=curl -sL google.com EVENT_NAME=Google Availability MATCH_CONTENT=0 MATCH_CRITERIA=ne STATUS=enabled TEST_TYPE=status TRIGGER_CUSTOM=notify-send --urgency=critical "$EVENT_NAME" "Google is not available!"
下面是一个示例事件文件,当google.com主页源代码包含单词surprise:
COMMAND=curl -sL google.com EVENT_NAME=Google Surprise MATCH_CONTENT=surprise MATCH_CRITERIA=contains STATUS=enabled TEST_TYPE=content TRIGGER_CUSTOM=notify-send --urgency=critical "$EVENT_NAME" "Google contains a surprise!"
下面是当/tmp的大小大于或等于10M时触发的示例事件文件:
COMMAND=du -ms /tmp | cut -f1 EVENT_NAME=Size Check MATCH_CONTENT=10 MATCH_CRITERIA=ge STATUS=enabled TEST_TYPE=arithmetic TRIGGER_CUSTOM=notify-send --urgency=critical "$EVENT_NAME" "/tmp is >= 10M in size!"
测试类型选项:
arithmetic content status # exit code
算术和状态测试的匹配条件:
eq ge gt le lt ne
内容测试的匹配条件:
contains does_not_contain matches does_not_match null not_null
STATUS指示事件是否处于活动状态:
enabled disabled triggered # this will be set by triggerd upon a trigger event
触发器
有两种类型的触发器可用。
TRIGGER_CUSTOM用于指示shell命令。
即TRIGGER_CUSTOM=notify-send "Trigger Notification"
TRIGGER_NAMED用于指示触发器模板的名称
即TRIGGER_NAMED=special
触发器模板可以在$HOME/.config/triggerd/triggers.conf
即special=notify-send--icon=~/.config/triggerd/icons/special.png--urgency=critical "triggerd: $EVENT_NAME" "special event was triggered!"
事件名在任何一个触发器中都可以作为$EVENT_NAME引用。$MATCH_CONTENT也是如此
如果未指示触发器,则将通过notify send显示默认通知