是否可以编写仅在文件夹大小发生更改时运行的cron/SHELL脚本?
是否可以编写仅在文件夹大小发生更改时运行的cron/脚本。。i、 e.文件夹中的文件被更改或新文件被创建,因此文件夹大小将更改,cron或脚本将运行。标准中不支持此类监视事件:cron严格基于时间 假设使用了cron,则需要在“唤醒”作业中处理此任务,然后该作业可以选择立即休眠/结束,或者根据将文件夹与以前的已知状态进行比较来执行其他操作 现在,如果将cron从作为启动/监视平台的角色中移除,那么就有“非轮询”的方法来监视文件系统,例如 如果只是寻找一个系统守护进程来补充此任务的标准cron,请参阅以下备选方案 : incron是一个“inotify cron”系统。它的工作原理与常规cron类似,但由文件系统事件而不是时间段驱动。它包含两个程序,一个称为“incrond”(类似于crond)的守护进程和一个表操纵器“incrontab”(类似于“crontab”) : Watcher是一个守护进程,它监视指定文件/文件夹的更改,并根据这些更改发出命令。它与incron类似,但是,配置使用了一个更易于读取的ini文件,而不是纯文本文件。与incron不同,它还可以递归地监视目录。它也是用Python编写的,因此更容易破解 您的许多解决方案: -以inotifywait为例:是否可以编写仅在文件夹大小发生更改时运行的cron/SHELL脚本?,shell,cron,crontab,Shell,Cron,Crontab,是否可以编写仅在文件夹大小发生更改时运行的cron/脚本。。i、 e.文件夹中的文件被更改或新文件被创建,因此文件夹大小将更改,cron或脚本将运行。标准中不支持此类监视事件:cron严格基于时间 假设使用了cron,则需要在“唤醒”作业中处理此任务,然后该作业可以选择立即休眠/结束,或者根据将文件夹与以前的已知状态进行比较来执行其他操作 现在,如果将cron从作为启动/监视平台的角色中移除,那么就有“非轮询”的方法来监视文件系统,例如 如果只是寻找一个系统守护进程来补充此任务的标准cron,请
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工具包提供
-使用印克龙
您可以在此处看到完整的示例:
-简单的
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.flag之后发生更改,所以您需要将$dir.flag存储在您有写入权限的地方。看看这个解决方案,它很好: