2

如果服务器上员工文件夹中的文件发生更改,我想向我们公司的员工发送电子邮件通知。我有一个脚本,可以很好地使用 inotifywait 在每次文件更改时发送电子邮件。我想做的是在多个文件上传(假设 10 jpg 被上传到某人的员工文件夹)时只发送一封电子邮件。

此脚本会在每次文件更改时发送一封电子邮件:

inotifywait --recursive --exclude '.DS_Store' -e create -e moved_to -m /media/server/Staff/christoph |
    while read path action file ; do
        echo "The file '$file' appeared in directory '$path' via '$action'"
        sendEmail -f server@email.com -t user@gmail.com -s smtpout.secureserver.net:80 -xu user@email.com -xp password \
         -u ""The file $file appeared in your directory"" -m ""To view your file go to $path""
done

最聪明的方法是什么?让 inotify 等待进一步的输入让我们说 2 分钟有意义吗?

顺便说一句,我为此使用 sendemail,因为 ISP 阻止了端口 25。

4

1 回答 1

2

我可能会通过将修改通知写入文件来做到这一点(如果我这样做,我可能会使用 SQLite 数据库),然后每隔几分钟运行一次 cron 作业以检查数据库并发送汇总电子邮件。

另一种选择是使用 inotifywait 触发脚本来监视该特定文件,它只会循环检查文件的大小/修改时间,然后休眠一段时间。一旦文件停止增长,脚本会将文件信息附加到消息文件中。cron 作业将发送消息文件(如果它不为空)然后截断该文件。这将避免从日志文件读取和写入数据的需要。

于 2015-04-15T17:55:35.213 回答