A system administrator often needs to run a command repeatedly in a certain periods of time. Often such tasks can be easily completed with simple cron commands. In most of the cases this should work, but the shortest period which you can run cron command is every 1 minute. Believe it or not, in many cases this is too slow.

В этом руководстве вы узнаете простые техники сценарного программирования для мониторинга или отслеживания определенной команды в непрерывно работающем состоянии, аналогично команде top (непрерывно отслеживать процесс и использование памяти) по умолчанию каждые 3 секунды.
Мы не будем останавливаться, чтобы обсудить причины, почему вам может потребоваться выполнять команды настолько часто. Я верю, что у каждого свои причины для этого в повседневной работе или даже на домашних компьютерах и ноутбуках.
1. Использование команды watch
Watch – это команда Linux, которая позволяет выполнять команду или программу периодически и также показывает вам вывод на экран. Это означает, что вы сможете видеть вывод программы в реальном времени. По умолчанию watch перезапускает команду/программу каждые 2 секунды. Интервал можно легко изменить в соответствии с вашими требованиями.
Мониторинг использования памяти
«Watch» очень легко использовать. Чтобы проверить его, вы можете сразу запустить терминал Linux и ввести следующую команду:
# watch free -m
Вышеуказанная команда будет проверять свободную память вашей системы и обновлять результаты команды free каждые две секунды.

Как видно из вышеприведенного вывода, у вас есть заголовок, отображающий информацию о (слева направо) интервале обновления, выполняемой команде и текущем времени. Если вы хотите скрыть этот заголовок, вы можете использовать опцию -t
.
Следующий логический вопрос заключается в том, как изменить интервал выполнения. Для этой цели вы можете использовать опцию -n
, которая определяет интервал, с которым будет выполняться команда. Этот интервал указывается в секундах. Так что, допустим, вы хотите запустить ваш файл script.sh
каждые 10 секунд, вы можете сделать это так:
# watch -n 10 script.sh
Обратите внимание, что если вы выполните команду, как показано выше, вам нужно будет выполнить cd
в каталоге (узнать Узнайте 15 примеров команды cd), где находится сценарий, или указать полный путь к этому сценарию.
Другие полезные опции команды watch:
-b
– создает звуковой сигнал, если завершение команды не равно нулю.-c
– интерпретирует ANSI-последовательности цвета.-d
– выделяет изменения в выводе команды.
Отслеживание Вошедших Пользователей, Время Безотказной Работы и Среднюю Загрузку
Допустим, вы хотите отслеживать вошедших пользователей, время безотказной работы сервера и среднюю загрузку вывода непрерывно каждые несколько секунд, тогда используйте следующую команду, как показано:
# watch uptime

Чтобы выйти из команды, нажмите CTRL+C
.
Здесь команда 'uptime'
будет выполняться и отображать обновленные результаты каждые 2 секунды по умолчанию.
Отслеживание Прогресса Команды Копирования
В Linux, при копировании файлов из одного места в другое с помощью команды cp
прогресс передачи данных не отображается, чтобы увидеть прогресс копирования данных, вы можете использовать команду watch
вместе с командой du -s для проверки использования диска в реальном времени.
# cp ubuntu-15.10-desktop-amd64.iso /home/tecmint/ & # watch -n 0.1 du -s /home/tecmint/ubuntu-15.10-desktop-amd64.iso

Если вы считаете, что вышеуказанный процесс слишком сложен для выполнения, то я предлагаю вам воспользоваться командой Advance copy, которая показывает прогресс копирования данных.
2. Использование команды sleep
Sleep часто используется для отладки оболочечных скриптов, но у него также есть много других полезных целей. Например, в сочетании с for
или while
циклами, вы можете получить довольно впечатляющие результаты.
Если вы новичок в написании скриптов на bash, вы можете ознакомиться с нашим руководством по циклам bash здесь.
В случае, если это первый раз, когда вы слышите о команде "sleep"
, она используется для задержки выполнения чего-либо на определенное количество времени. В скриптах вы можете использовать ее, чтобы указать вашему скрипту выполнить команду 1, подождать 10 секунд, а затем выполнить команду 2.
С помощью вышеуказанных циклов вы можете указать bash выполнить команду, подождать N секунд, а затем выполнить команду снова.
Ниже приведены примеры обоих циклов:
Пример цикла for
# for i in {1..10}; do echo -n "This is a test in loop $i "; date ; sleep 5; done
Вышеупомянутая однострочная команда выполнит команду echo и отобразит текущую дату 10 раз с интервалом в 5 секунд между выполнениями.
Вот пример вывода:
This is a test in loop 1 Wed Feb 17 20:49:47 EET 2016 This is a test in loop 2 Wed Feb 17 20:49:52 EET 2016 This is a test in loop 3 Wed Feb 17 20:49:57 EET 2016 This is a test in loop 4 Wed Feb 17 20:50:02 EET 2016 This is a test in loop 5 Wed Feb 17 20:50:07 EET 2016 This is a test in loop 6 Wed Feb 17 20:50:12 EET 2016 This is a test in loop 7 Wed Feb 17 20:50:17 EET 2016 This is a test in loop 8 Wed Feb 17 20:50:22 EET 2016 This is a test in loop 9 Wed Feb 17 20:50:27 EET 2016 This is a test in loop 10 Wed Feb 17 20:50:32 EET 2016
Вы можете заменить команды echo и date на свои собственные команды или скрипт и изменить интервал ожидания в соответствии с вашими потребностями.
Пример цикла while
# while true; do echo -n "This is a test of while loop";date ; sleep 5; done
Вот пример вывода:
This is a test of while loopWed Feb 17 20:52:32 EET 2016 This is a test of while loopWed Feb 17 20:52:37 EET 2016 This is a test of while loopWed Feb 17 20:52:42 EET 2016 This is a test of while loopWed Feb 17 20:52:47 EET 2016 This is a test of while loopWed Feb 17 20:52:52 EET 2016 This is a test of while loopWed Feb 17 20:52:57 EET 2016
Вышеуказанная команда будет выполняться, пока она не будет прервана или остановлена пользователем. Это может пригодиться, если вам нужно запустить команду в фоновом режиме и вы не хотите полагаться на cron.
Важно: При использовании вышеуказанных методов настоятельно рекомендуется установить интервал достаточно длинный, чтобы дать вашей команде достаточно времени для завершения выполнения перед следующим запуском.
Заключение
Примеры в этом руководстве полезны, но не призваны полностью заменить утилиту cron. Это зависит от вас, какой из них лучше подходит для вас, но если нужно разделить использование обеих техник, я бы сказал следующее:
- Используйте cron, когда вам нужно выполнять команды периодически даже после перезагрузки системы.
- Используйте методы, объясненные в этом руководстве, для программ/скриптов, предназначенных для запуска в текущей сессии пользователя.
Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь отправлять их в разделе комментариев ниже.
Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/