Мне нужен сервис, остановленный, когда изменение происходит в файле failed.log. Я смотрел на команду часов, чтобы сделать это: watch -d -g -t 'ls -l /home/username/*failed.log'
Эта команда проверит если вывод от ls
изменился. Если это сделало, я хочу, чтобы это остановило сервис CUPS.
Я изучал inotify-tools
, но это - то, где это стало немного слишком сложным для меня. Какие-либо предложения?
Как насчет того, чтобы соединить обе команды &&
? Это удостоверится, что из первой команды успешно выходят с кодом 0
который равняется true
в bash
прежде чем вторая часть выполняется. Если это верно, вторая часть выполняется, и сервис чашек будет остановлен.
watch -d -g -t ls -l /home/username/*failed.log && service cups stop
У меня есть подобный сценарий использования, который мог бы помочь Вам, в зависимости от содержания файла журнала.
У меня есть сервер OpenVPN на работе. Когда я должен перезагрузить для применения обновлений, но у меня есть текущие сеансы пользователя, я настроил некоторое время цикл для проверки на определенное grep
шаблон, ("vpnip, имя пользователя, wanip, устанавливает метку времени"). Если шаблон найден, я ожидаю некоторое время; еще, если шаблон не найден (ненулевой код выхода), я перезагружаю.
Это очень характерно для моего сервера, но можно скорректировать grep оператор для удовлетворения потребностям.
while [ 1 ] ; do
if egrep '10.8.0.[0-9]+,[a-zA-Z\-]+,[0-9\.]{7,15}:[0-9]+,(Mon|Tue|Wed|Thu|Fri|Sat|Sun) (Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec) +[0-9]{1,2} [0-9:]{8} [0-9]{4}' /ramdisk/openvpn-status.log ; then
echo someone still connected ;
sleep 30s ;
else
echo reboot now ;
fi ;
done
Пример выше имеет echo reboot now
потому что я не хотел перезагружать сейчас, но Вы получаете идею.