首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >实时监控文件计数

实时监控文件计数
EN

Unix & Linux用户
提问于 2020-10-30 15:55:10
回答 1查看 904关注 0票数 1

我对bash脚本很陌生,我正在尝试编写一个bash脚本,它将监视特定数量的文件在一个时间框架内被发送的路径。假设有20个文件预计来自9 am -11 am。

脚本必须能够执行以下操作:

  • 检测文件是否来源晚。如果路径是空的9 上午,给予10 分钟宽限期,并发送电子邮件通知源是迟发送文件。
  • 在时间范围内,检测文件集是否不完整。给10 分钟宽限期,如果文件数量仍然不等于20,发送电子邮件通知说文件集是不完整的。
  • 如果没有发现问题,发送确认电子邮件。

我正在考虑把这个设置在一个索引标签上。只有当文件计数完成或超过11:10 am (有10 分钟宽限期)时,脚本才会停止。

我需要建议如何实现前两个目标。我只能报道没有问题的案子。我有想法,但不知道怎么把它写在剧本里。

到目前为止,这就是我所拥有的:

第1版:

代码语言:javascript
复制
#!/bin/bash

hour=(9 10 11)
server=myserver@domain.com
notify=notify@domain.com

if [[ "${hour[@]}" =~ "$(date +"%H")" ]]; then
   if [[ $(ls /fake/path | wc -l) == 20 ]]; then
      echo -e "All files received" | mailx -s "All files received" -r $server $notify
   fi
fi

(由于不建议解析ls输出,我更新了下面的脚本):Version 2:

代码语言:javascript
复制
#!/bin/bash

hour=(9 10 11)
server=myserver@domain.com
notify=notify@domain.com

if [[ "${hour[@]}" =~ "$(date +"%H")" ]]; then
   echo $(date +"%Y-%m-%d %H:%M:%S") $1 >> /tmp/record.txt
   if [[ $(cat /tmp/record.txt | wc -l) == 20 ]]; then
      echo -e "All files received" | mailx -a /tmp/record.txt -s "All files received" -r $server $notify
   fi
fi

任何想法都欢迎。我可能看错了。

EN

回答 1

Unix & Linux用户

回答已采纳

发布于 2020-10-31 16:45:35

您可以使用一个简单的cron作业来完成它。假设您希望在09:10上检查,如果文件计数为零,则发送邮件通知,如果文件计数小于20,则在11:10发送邮件通知。

代码语言:javascript
复制
#!/bin/bash

n="$1"
message="$2"
target_dir="/full/path/to/directory"

cnt=$(find "$target_dir" -type f -printf '\n' | wc -l)

if (( cnt < n )); then
    
else
    
fi

正如您所看到的,测试文件计数和消息的值是参数。所以你可以

代码语言:javascript
复制
crontab -e

添加这些行

代码语言:javascript
复制
10 9 * * * bash /full/path/to/the/scipt.sh 1 "No files yet"
10 11 * * * bash /full/path/to/the/scipt.sh 20 "Files less than 20"

保存文件。现在安装了新的crontab。

备注:

  • 执行的时间和时间是很容易定制的。您可以运行它两次或每N分钟或任何时候,您想用最小的努力来改变它。
  • 您可以编写代码来计数行数和发送一次邮件。您可以为预期的文件数量、要发送的消息以及更多的内容设置参数。它简单易懂。
  • 对于实际计数,我们使用find命令的D13参数。我们只为每个文件打印一个新行,并计算换行符,因此任何文件名都会被处理。
  • GNU假设。
票数 0
EN
页面原文内容由Unix & Linux提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://unix.stackexchange.com/questions/617211

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档