Поиск по сайту:

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


Системному администратору часто приходится запускать команду повторно через определенные промежутки времени. Часто такие задачи можно легко выполнить с помощью простых команд cron. В большинстве случаев это должно сработать, но самый короткий период, в течение которого вы можете запускать команду cron, — каждые 1 минуту. Хотите верьте, хотите нет, но во многих случаях это слишком медленно.

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

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

1. Используйте команду просмотра.

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

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

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

watch free -m

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

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

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

watch -n 10 script.sh

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

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

  1. -b – создает звуковой сигнал, если выход команды не равен нулю.
  2. -c — интерпретирует цветовые последовательности ANSI.
  3. -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 

Если вы считаете, что описанный выше процесс слишком сложен для выполнения, я предлагаю вам использовать команду предварительного копирования, которая показывает ход выполнения данных во время копирования.

2. Используйте команду сна.

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. Используйте методы, описанные в этом руководстве, для программ/скриптов, которые предназначены для запуска в текущем сеансе пользователя.

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