是否可以编写一个仅在文件夹大小发生变化时运行的cron/SHELL脚本



是否可以编写一个仅在文件夹大小发生变化时运行的cron/脚本。。即,文件夹中的文件被更改或创建了新文件,因此文件夹大小将发生变化,cron或脚本将运行

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

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

现在,如果cron从启动/监视平台的角色中删除,那么就有一些"非轮询"方法来监视文件系统,比如inotify。

如果只是为该任务寻找一个系统守护程序来补充标准cron,请参阅以下备选方案。

incron:

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

观察者:

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

您的多种解决方案:

-以inotifywait为例:

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

在Ubuntu中,inotify是由inotify工具包提供的。

-使用incron

您可以在此处看到完整的示例:http://www.cyberciti.biz/faq/linux-inotify-examples-to-replicate-directories/

-简单

ls -1A isempty | wc -l 

我的习惯用法通常是:

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

然而,这是针对修改时间而不是大小进行的测试目录的大小不是一个非常有用的概念,因为它只会偶尔更改。

顺便说一句,$dir.flag不能在$dir中创建,因为这会使$dir在$dir.frag之后发生更改,所以你需要将$dir.fag存储在你有写权限的地方。

最新更新