Если нам нужно запускать команду раз в N секунд и видеть постоянно обновляемый результат:
watch -n <seconds> myscript.sh
Как применить это в работе?
Пример 1. Логи
Например, мы смотрим лог нашего веб-сервера.
Ввели команду, получили вывод последних сообщений лога.
Но хочется чтобы этот лог обновлялся в реальном времени, самостоятельно.
Добавляем команду watch
:
watch -n 1 sudo tail /var/log/nginx/access.log
Теперь лог вебсервера обновляется раз в секунду. Мы получили готовый мониторинг, всего лишь применив пару команд в консоли.
В команде tail
есть встроенный параметр -f
который включает автообновление вывода, а также параметр -s
который устанавливает интервал в секундах.
Поэтому если мы просто отслеживаем файл, то можно обойтись без использования watch
.
Пример 2. Рассинхронизация времени на сервере
Я заметил, что на одном из моих серверов время спешит на полминуты вперёд.
Пока я чинил эту ошибку, мне нужно было отслеживать “рассинхрон”, поэтому я открыл два окошка консоли, для моего компьютера и для сервера и вывел в них текущее время, сделав своего рода часы.
watch -n 1 date
Теперь я могу легко следить за разницей во времени.
Пример 3. Проверяем, сколько парсеров запущено
В одном из проектов нужно было запускать парсер раз в минуту.
Легче некуда, добавляем задачу в cron
.
Парсер работает дольше минуты, поэтому нам нужно проверить, что в момент запуска предыдущий парсер уже завершил работу. Иначе процессы будут плодиться каждую минуту, и рано или поздно у нас закончится память на сервере.
Хорошо, добавляем эту проверку. Добавили. Но она не работает. Ага, опечатка. Фиксим. Заливаем.
Теперь нужно убедиться, что процессы не плодятся. Выводим список процессов парсера через watch
и идём заваривать кофе ☕
watch -n 1 'ps ax|grep parser'
Пример 4. Статус сервиса
Я сделал сервис, который обрабатывает колбеки и хранит данные в Redis.
Чтобы следить за его работой, я сделал команду которая выводит все интересующие меня характеристики.
Но мне нужно следить за состоянием сервиса в реалтайме, и я просто добавлю watch
:
watch -n 1 './yii support/redis/status'
Если сделать несколько таких команд и вывести в одной консоли, разделив области экрана а-ля tmux
, то мы получим готовый дашборд в терминале.