使用linux内核inotify api的基于文件事件的任务调度器
cronif的Python项目详细描述
cronify是一个基于文件事件的任务调度程序,它使用linux内核的inotify api。如果你愿意的话,一个不起眼的cron实现。
它允许在文件事件发生时触发操作,可配置的操作参数可以是文件数据,如文件名和文件日期时间,并安排在特定时间段内运行的操作。
一旦安装,它将作为服务或守护进程运行,非常像cron本身。cronify也可以用作python库。
服务的配置是基于yaml的。
安装
需要运行的Linux内核>;=2.6.13
$ sudo pip install cronify $ sudo chmod +x /etc/init.d/cronifyd # Install a /etc/cronify.yaml file as in the examples below # Once a configuration file is in place, start the cronify daemon with the provided init script $ sudo /etc/init.d/cronifyd start
配置示例
$ cat /etc/cronify.yaml
/tmp/testdir :name :Access log watcherrecurse :falsefilemasks :somefile.* :actions :-processFile :args:-$filename-YYYYMMDDcmd:echo
$ sudo /etc/init.d/cronifyd start $ touch /tmp/testdir/somefile.txt $ tail /var/log/cronify/cronify.log cronify.cronify - Thread-1 - 2013-03-26 17:40:40,485 - INFO - Got result from action {'cmd': 'echo', 'args': ['echo', '/tmp/testdir/somefile.txt', '20130326']} - /tmp/testdir/somefile.txt 20130326
具有多个监视程序和延迟操作的更复杂配置
有关接受配置的完整列表,请参见存储库中的example.yaml
$ cat /etc/cronify.yaml
/tmp/testdir :name :Access log watcherrecurse :falsefilemasks :access_log_YYYYMMDD.* :actions :-processFile :args:-$filename-YYYYMMDDcmd:process/tmp/testdir2 :name :Other log watcherrecurse :truefilemasks :other_log_YYYYMMDD.* :actions :# Actions to perform on the file in sequence.-processFile :# Do not start action before this time. Action is queued until start_time if triggered prior to it.# This configuration setting is optionalstart_time:0800# Do not start action after this time. Action is queued until next start_time if triggered after end time# This configuration setting is optionalend_time:1000args:-$filename-YYYYMMDDcmd:process
已知限制
重新启动服务时,当前排队的操作将丢失。
使用recurse时,inotify仅限于监视树中n个子目录,其中n是/proc/sys/fs/inotify/max_user_watches的值。见http://linux.die.net/man/7/inotify
用户可以通过修改/proc/sys/fs/inotify/max_user_手表来增加此限制
当在nfs服务器端监视nfs目录时,inotify api只会看到nfs server生成的事件,然后是cronify本身。
在nfs客户端监视nfs目录时,inotify根本看不到任何事件。
换言之,如果您计划监视由nfs client创建的文件,则当前无法执行此操作。