0

是否可以编写一个仅在文件夹大小发生变化时运行的 cron/脚本 .. 即文件夹内的文件被更改或新文件被创建,因此文件夹大小会改变并且 cron 或脚本会跑

4

3 回答 3

2

在标准cron不支持这样的监控事件:cron 是严格基于时间的。

假设使用 cron,则需要在“唤醒”作业中处理此任务,然后根据将文件夹与先前已知状态进行比较,该作业可以选择立即休眠/结束或执行其他操作..

现在,如果 cron 从作为启动/监控平台的角色中移除,那么就有“非轮询”方式来监控文件系统,例如inotify

如果只是寻找系统守护程序来补充此任务的标准 cron,请参阅以下替代方案。

内嵌

incron 是一个“inotify cron”系统。它的工作方式与常规 cron 类似,但由文件系统事件而不是时间段驱动。它包含两个程序,一个名为“incrond”的守护程序(类似于 crond)和一个表操作器“incrontab”(如“crontab”)。

观察者

Watcher 是一个守护程序,它监视指定文件/文件夹的更改并触发命令以响应这些更改。它类似于 incron,但是,配置使用更易于读取的 ini 文件而不是纯文本文件。与 incron 不同,它还可以递归地监视目录。它也是用 Python 编写的,因此更容易破解。

于 2013-07-23T00:01:54.827 回答
0

我的成语通常是:

dir=/dir/to/watch
if [ $dir -nt $dir.flag ]; then
     touch -r $dir $dir.flag
     do_work
fi

然而,这测试的是修改时间,而不是大小目录的大小不是一个非常有用的概念,因为它只是很少更改。

顺便说一下,$dir.flag 不能在 $dir 中创建,因为这会使 $dir 在 $dir.flag 之后发生变化,因此您需要将 $dir.flag 存储在您有写权限的地方。

于 2013-07-23T08:26:55.790 回答
0

您的许多解决方案:

- 以 inotifywait 为例:

inotifywait -m /path 2>&- | awk '$2 == "CREATE" { print $3; fflush() }' |
    while read file; do
        echo "$file"
        # do something with the file
    done

在 Ubuntu 中,inotifywait 由 inotify-tools 包提供。

- 使用 incron

你可以在这里看到一个完整的例子:http ://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

-简单的

ls -1A isempty | wc -l 
于 2013-07-23T07:16:12.227 回答