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