Назад | Перейти на главную страницу

Сценарий bash в задании cron - электронное письмо, когда файл был изменен

я смотрел на Эта тема написать сценарий 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 myemail@gmail.com
fi

Затем я добавил этот сценарий к почасовому заданию cron:

 01 * * * * /home/myuser/sites/mysite/logs/nginx/monitoring.sh

Это вообще не работает. Глядя на мои электронные письма (учетная запись отправителя, которую использует ssmtp), скрипт запускается каждый час и отображает nothing has changed даже если error.log файл был изменен.

Может быть, используя inotifywait было бы уместнее? Любые идеи?

Заранее спасибо.

РЕДАКТИРОВАТЬ: если я запустил этот скрипт вручную после изменения error.log файл, он работает, и я получаю электронное письмо.

В -mmin вариант, который вы использовали, соответствует точный количество минут, а не количество минут "в пределах этого диапазона". См. Этот пример:

$ touch foo
$ find . -mmin 1
.
./foo
$ find . -mmin 10
$

Вы хотите использовать значение -10 вместо того 10:

$ touch foo
$ find . -mmin -10
.
./foo

И вы, вероятно, захотите дать ему -type flag, чтобы сопоставлять только файлы, а не каталоги:

$ find . -type f -mmin -10
./foo