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

时间:2013-07-22 23:50:56

标签: shell cron crontab

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

3 个答案:

答案 0 :(得分:2)

标准cron中的此类监视器事件无支持:cron 严格基于时间。

假设使用了cron,则需要在“唤醒”作业中处理此任务,然后可以选择立即睡眠/结束或执行其他操作,具体取决于将文件夹与先前已知的状态进行比较。

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

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

incron

  

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

Watcher

  

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

答案 1 :(得分: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中,inotify-tool由inotify-tools包提供。

- 使用incron

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

- 简单

ls -1A isempty | wc -l 

答案 2 :(得分:0)

我的习语通常是:

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

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

顺便说一下,$ dir.flag无法在$ dir中创建,因为这会在$ dir.flag之后更改$ dir,所以你需要在你有写权限的地方存储$ dir.flag。