Как запустить или повторить команду Linux каждые X секунд навсегда

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.

Run Linux Command Every Second

В этом руководстве вы узнаете простые техники сценарного программирования для мониторинга или отслеживания определенной команды в непрерывно работающем состоянии, аналогично команде top (непрерывно отслеживать процесс и использование памяти) по умолчанию каждые 3 секунды.

Мы не будем останавливаться, чтобы обсудить причины, почему вам может потребоваться выполнять команды настолько часто. Я верю, что у каждого свои причины для этого в повседневной работе или даже на домашних компьютерах и ноутбуках.

1. Использование команды watch

Watch – это команда Linux, которая позволяет выполнять команду или программу периодически и также показывает вам вывод на экран. Это означает, что вы сможете видеть вывод программы в реальном времени. По умолчанию watch перезапускает команду/программу каждые 2 секунды. Интервал можно легко изменить в соответствии с вашими требованиями.

Мониторинг использования памяти

«Watch» очень легко использовать. Чтобы проверить его, вы можете сразу запустить терминал Linux и ввести следующую команду:

# watch free -m

Вышеуказанная команда будет проверять свободную память вашей системы и обновлять результаты команды free каждые две секунды.

Monitor Memory Usage in Linux

Как видно из вышеприведенного вывода, у вас есть заголовок, отображающий информацию о (слева направо) интервале обновления, выполняемой команде и текущем времени. Если вы хотите скрыть этот заголовок, вы можете использовать опцию -t.

Следующий логический вопрос заключается в том, как изменить интервал выполнения. Для этой цели вы можете использовать опцию -n, которая определяет интервал, с которым будет выполняться команда. Этот интервал указывается в секундах. Так что, допустим, вы хотите запустить ваш файл script.sh каждые 10 секунд, вы можете сделать это так:

# watch -n 10 script.sh

Обратите внимание, что если вы выполните команду, как показано выше, вам нужно будет выполнить cd в каталоге (узнать Узнайте 15 примеров команды cd), где находится сценарий, или указать полный путь к этому сценарию.

Другие полезные опции команды watch:

  1. -b – создает звуковой сигнал, если завершение команды не равно нулю.
  2. -c – интерпретирует ANSI-последовательности цвета.
  3. -d – выделяет изменения в выводе команды.

Отслеживание Вошедших Пользователей, Время Безотказной Работы и Среднюю Загрузку

Допустим, вы хотите отслеживать вошедших пользователей, время безотказной работы сервера и среднюю загрузку вывода непрерывно каждые несколько секунд, тогда используйте следующую команду, как показано:

# watch uptime
Watch Linux Load Average

Чтобы выйти из команды, нажмите 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 
Monitor Progress of Copy Command

Если вы считаете, что вышеуказанный процесс слишком сложен для выполнения, то я предлагаю вам воспользоваться командой 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. Это зависит от вас, какой из них лучше подходит для вас, но если нужно разделить использование обеих техник, я бы сказал следующее:

  1. Используйте cron, когда вам нужно выполнять команды периодически даже после перезагрузки системы.
  2. Используйте методы, объясненные в этом руководстве, для программ/скриптов, предназначенных для запуска в текущей сессии пользователя.

Если у вас есть какие-либо вопросы или комментарии, не стесняйтесь отправлять их в разделе комментариев ниже.

Source:
https://www.tecmint.com/run-repeat-linux-command-every-x-seconds/