Як періодично запускати програму за допомогою команди Watch у Linux

Іноді виникає потреба багаторазово виконувати певну команду чи програму для відстеження різноманітних параметрів вашої системи, таких як запущені процеси, використання пам’яті на диску чи активність користувачів. Команда `watch` в Linux дозволяє автоматизувати ці завдання, позбавляючи від необхідності ручного повторного запуску.

Завдяки цій команді ви отримуєте можливість спостерігати за системними подіями в режимі реального часу, такими як підключення користувачів, стан мережі, завантаження пам’яті та процесора, використання дискового простору та інші. Розглянемо докладніше, як використовувати команду `watch` у середовищі Linux.

Що таке команда `watch`?

Команда `watch` в Linux багаторазово запускає вказану команду або програму через визначені інтервали часу і показує її вивід у терміналі. Це дає змогу стежити за змінами у результаті в режимі реального часу. Кожного інтервалу вивід оновлюється, замінюючи попередні результати. За замовчуванням, команда повторюється кожні дві секунди, допоки ви не зупините її вручну за допомогою клавіш Ctrl + C.

Синтаксис команди `watch`

Синтаксис команди `watch` виглядає так:

 watch [опції] <команда> 

Існує ряд опцій командного рядка, які можна використовувати з командою `watch`. Якщо ви запустите `watch` без жодних опцій, вона буде виконувати задану команду кожні дві секунди. Наприклад, наступна команда покаже вивід команди `ls`:

 watch ls -l ~/ 

Результат показуватиме зміни у вмісті каталогу, наприклад, якщо файл створено, видалено або його розмір змінився. Оновлення виводу відбувається кожні дві секунди.

Виконання команди кожні X секунд за допомогою `watch`

Інтервал оновлення команди `watch` можна налаштувати. Це означає, що ви можете задати час у секундах, який `watch` має чекати перед повторним виконанням команди. Для зміни інтервалу оновлення використовується параметр `-n`, за яким слідує значення інтервалу в секундах.

 watch -n <секунди> <команда> 

Наприклад, для запуску команди кожні 5 секунд, використайте:

 watch -n 5 <команда> 

Підсвічування змін між оновленнями

Команда `watch` перезаписує вивід при кожному оновленні. За допомогою параметра `-d` ви можете підсвітити зміни між попереднім та оновленим виводом.

 watch -d <команда> 

Приховування заголовка у виводі команди `watch`

За замовчуванням команда `watch` відображає заголовок у верхній частині кожного виводу, що містить інтервал оновлення, назву команди, поточну дату і час системи. Ви можете прибрати цей заголовок з виводу за допомогою параметра `-t`:

 watch -t <команда> 

Подавання звукового сигналу при помилці

Коли процес Linux завершує роботу, він повертає код виходу. Як правило, значення 0 означає успішне виконання, а відмінне від нуля значення свідчить про помилку. Параметр `-b` команди `watch` відтворює звуковий сигнал, якщо команда повертає ненульовий код виходу.

Наприклад, якщо ви хочете стежити за `sshd.service` та отримувати сповіщення, коли служба зупиниться, використайте команду:

 watch -b sudo systemctl status sshd.service 

Ця команда подасть звуковий сигнал, коли служба зупиниться. Сигнал припиниться, коли служба відновиться. Щоб перевірити це, відкрийте інше вікно терміналу та зупиніть службу. Звукові сигнали будуть постійно лунати, поки ви не перезапустите службу. Однак для використання цієї функції у вашій системі повинен бути встановлений пакет для звукових сигналів.

Завершення виконання команди `watch` після зміни виводу

Ви також можете налаштувати команду `watch` на припинення виконання та вихід, коли вивід команди зміниться. Для цього використовується параметр `-g`. Цей параметр є особливо корисним у випадках, коли ви очікуєте певних змін у виводі.

Як тільки вивід зміниться, команда `watch` завершить свою роботу. Ви можете поєднувати цей параметр з командою `echo` для виведення повідомлення на екран.

Розглянемо приклад, коли ви очікуєте на появу файлу у вашому каталозі. Наступна команда буде відстежувати каталог на наявність вказаного файлу. Як тільки він з’явиться, команда `watch` припинить роботу, а повідомлення про це буде показано в терміналі.

 watch -g "ls -l | grep filename" && echo "file arrived" 

Іншим корисним прикладом є сповіщення про те, коли певний користувач входить у вашу систему:

 watch -g "who | grep username" && echo "username logged in" 

Ця команда буде контролювати вивід команди `who`, яка показує список користувачів, що увійшли в систему. Коли вказаний користувач авторизується, команда `watch` зупиниться і відобразить повідомлення в терміналі.

Аналогічно, можна налаштувати `watch` на зупинку, коли у файлі з’являться певні зміни. Важливо пам’ятати, що при використанні конвеєра команд необхідно брати всю команду в лапки.

Відстеження активності у вашій системі Linux

Якщо ви часто повторюєте одні й ті самі дії, подумайте про використання команди `watch` для їх автоматизації. Це звільнить вас від частого вводу команд для відстеження змін.

Ви також можете використовувати команду `watch` у поєднанні з іншими командами Linux для моніторингу системних ресурсів і дій, а також для відстеження змін у файлах або каталогах.