是否可以编写一个仅在文件夹大小发生变化时运行的 cron/脚本 .. 即文件夹内的文件被更改或新文件被创建,因此文件夹大小会改变并且 cron 或脚本会跑
3 回答
在标准cron中不支持这样的监控事件:cron 是严格基于时间的。
假设使用 cron,则需要在“唤醒”作业中处理此任务,然后根据将文件夹与先前已知状态进行比较,该作业可以选择立即休眠/结束或执行其他操作..
现在,如果 cron 从作为启动/监控平台的角色中移除,那么就有“非轮询”方式来监控文件系统,例如inotify。
如果只是寻找系统守护程序来补充此任务的标准 cron,请参阅以下替代方案。
内嵌:
incron 是一个“inotify cron”系统。它的工作方式与常规 cron 类似,但由文件系统事件而不是时间段驱动。它包含两个程序,一个名为“incrond”的守护程序(类似于 crond)和一个表操作器“incrontab”(如“crontab”)。
观察者:
Watcher 是一个守护程序,它监视指定文件/文件夹的更改并触发命令以响应这些更改。它类似于 incron,但是,配置使用更易于读取的 ini 文件而不是纯文本文件。与 incron 不同,它还可以递归地监视目录。它也是用 Python 编写的,因此更容易破解。
我的成语通常是:
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 存储在您有写权限的地方。
您的许多解决方案:
- 以 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