Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/email/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 发送有关受监视目录中文件更改的电子邮件_Bash_Email_Sh_Inotifywait - Fatal编程技术网

Bash 发送有关受监视目录中文件更改的电子邮件

Bash 发送有关受监视目录中文件更改的电子邮件,bash,email,sh,inotifywait,Bash,Email,Sh,Inotifywait,如果服务器上员工文件夹中的文件发生更改,我想向我们公司的员工发送电子邮件通知。 我有一个脚本,可以很好地使用inotifywait在每次文件更改时发送电子邮件。 我想做的是在多个文件上传(比方说10个jpg被上传到某人的员工文件夹)上只发送一封电子邮件 此脚本会在每次文件更改时发送电子邮件: inotifywait --recursive --exclude '.DS_Store' -e create -e moved_to -m /media/server/Staff/christoph |

如果服务器上员工文件夹中的文件发生更改,我想向我们公司的员工发送电子邮件通知。 我有一个脚本,可以很好地使用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。

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


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

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


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

谢谢Andy,我正在考虑创建一个日志文件并将其发送出去。问题是文件传输可能需要20分钟,因为我们从事视频制作,而且文件很大。我想知道是否可以从NetTalk服务器获取输出,以查看是否正在进行文件传输?如何防止脚本发送多封电子邮件?根据文件传输的工作方式,您可能会从“创建”改为“关闭写入”。如果文件传输是通过打开和关闭单个文件来完成的,那么这将起作用。使用数据库进行此操作,您还可以添加电子邮件是否已发送的标志,并检查跟踪cron作业运行之间的文件大小和修改时间,并且仅在大小和修改时间停止更改后发送电子邮件。再次感谢Andy!我正在尝试一个日志文件。close_write做了些奇怪的事。。比如连续发布文件夹中的每个文件,所以我想这在这种情况下不起作用。由于数据库和sql可能太离谱了,我将输出写入日志文件。检查日志文件中的新行的好方法是什么?如果它不同,请向用户发送电子邮件?我会使用tail-n1然后使用if语句吗?谢谢Andy,我正在考虑创建一个日志文件并发送出去。问题是文件传输可能需要20分钟,因为我们从事视频制作,而且文件很大。我想知道是否可以从NetTalk服务器获取输出,以查看是否正在进行文件传输?如何防止脚本发送多封电子邮件?根据文件传输的工作方式,您可能会从“创建”改为“关闭写入”。如果文件传输是通过打开和关闭单个文件来完成的,那么这将起作用。使用数据库进行此操作,您还可以添加电子邮件是否已发送的标志,并检查跟踪cron作业运行之间的文件大小和修改时间,并且仅在大小和修改时间停止更改后发送电子邮件。再次感谢Andy!我正在尝试一个日志文件。close_write做了些奇怪的事。。比如连续发布文件夹中的每个文件,所以我想这在这种情况下不起作用。由于数据库和sql可能太离谱了,我将输出写入日志文件。检查日志文件中的新行的好方法是什么?如果它不同,请向用户发送电子邮件?我会使用tail-n1然后使用if语句吗?