我在看这个话题编写一个 bash 脚本,每 60 分钟检查一次文件是否被修改,如果是,则使用 ssmtp 向我发送电子邮件。其内容如下 ( monitoring.sh
):
#!/bin/bash
[[ -z `find /home/myuser/sites/mysite/logs/nginx/error.log -mmin -60` ]]
if [ $? -eq 0 ]
then
echo -e "nothing has changed"
else
echo -e "Something went wrong!" | ssmtp -vvv [email protected]
fi
然后我将此脚本添加到每小时的 cronjob 中:
01 * * * * /home/myuser/sites/mysite/logs/nginx/monitoring.sh
这根本不起作用。查看我的电子邮件(ssmtp 使用的发件人帐户),脚本每小时运行一次,nothing has changed
即使error.log
文件已被修改也会回显。
也许使用inotifywait
更合适?有什么想法吗?
提前致谢。
编辑:如果我在修改error.log
文件后手动运行此脚本,它就会运行并且我会收到电子邮件。
答案1
您使用的选项-mmin
与精确的分钟数,而不是“在此范围内”的分钟数。请参见以下示例:
$ touch foo
$ find . -mmin 1
.
./foo
$ find . -mmin 10
$
您想要的是使用的值-10
而不是10
:
$ touch foo
$ find . -mmin -10
.
./foo
并且您可能还想给它添加-type
标志以仅匹配文件而不是目录:
$ find . -type f -mmin -10
./foo