cron 作业中的 Bash 脚本-文件修改时发送电子邮件

cron 作业中的 Bash 脚本-文件修改时发送电子邮件

我在看这个话题编写一个 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

相关内容