Linux выполнять команду каждые 2 секунды

Обновлено: 04.07.2024

Есть встроенная команда Unix repeat , первым аргументом которой является количество повторений команды, где команда (с любыми аргументами) определяется оставшимися аргументами repeat .

повторяет данную строку 100 раз и затем останавливается.

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

Я думал, что спрошу, существует ли такая вещь, прежде чем я напишу это. Я знаю, что это как двухстрочный скрипт на Perl или Python, но, возможно, есть более стандартный способ сделать это. Если нет, не стесняйтесь опубликовать решение на вашем любимом языке сценариев, стиле Rosetta Stone .

PS: Возможно, лучшим способом сделать это было бы обобщение, repeat чтобы взять как количество повторений (с -1 означает бесконечность), так и количество секунд для сна между повторениями. Приведенные выше примеры станут:

Почему бы не повторить команду [-t time] [-n number] [args . ]? Здорово. К сожалению , как на моем Ubuntu и мой AIX повторить это команда не найдено . Можете ли вы сделать, type repeat и дайте мне знать, откуда приходит? Я также на Ubuntu и у меня не установлен повтор. Любая информация о том, как установить это было бы полезно. @KeithThompson, csh, tcsh и zsh . Хотя это больше ключевое слово, чем встроенный

Попробуйте watch команду.

будет выполнить команду каждый второй (ну, технически, каждый второй плюс время, необходимое для command бежать как watch (по крайней мере, procps и busybox реализации) просто спит одна секунда между двумя отрезками command ), навсегда.

Если вы хотите передать команду exec вместо sh -c , используйте -x опцию:

На macOS вы можете получить watch из Mac Ports :

Или вы можете получить его от Homebrew :

Вы можете использовать MacPorts для его установки. смотреть порт sudo Также доступно в доморощенных (варево установить часы). +1 За новый мощный инструмент. Я привык while true; do X; sleep Y; done - это намного лучше. Проблема с этим инструментом (по крайней мере в Ubuntu) заключается в том, что он запускает полноэкранный режим, поэтому, если я сбрасываю некоторую периодическую информацию, я теряю предыдущую информацию. Он вызывается cmdwatch во FreeBSD (из портов:) sysutils/cmdwatch .

удар

Вот то же самое, что сокращенная однострочная (из комментариев ниже):

Использует ; для разделения команд и использует sleep 1 для while теста, так как он всегда возвращает true. Вы можете поместить больше команд в цикл - просто разделите их с помощью ;

Я считаю, что это работает так же, как написано в универсальной оболочке Bourne. @dreeves, используя ";" в качестве разделителя команды могут быть указаны в одной строке. Посмотрите на ответ Toony в качестве примера sleep 1 всегда возвращает true, поэтому вы можете использовать его как условие while. Не самая читаемая вещь в мире, но абсолютно законная: во время сна 1; сделать эхо "Привет"; сделано @ Дэвид Коста: Вы сделали разумное замечание, но sleep не всегда возвращаете правду. Ī̲ использовал такие циклы (хотя и с более длительной задержкой) именно потому, что есть способ изящно завершить его, убив процесс сна. @IncnisMrsi Я не думал об этом, на самом деле он возвращает ноль только по прошествии времени и ненулевой, когда он завершается сигналом. Спасибо за указание на это

Это обычно полезно, если вам нужно следить за чем-то, что выводится в одну строку, например, с загрузкой машины:

И если вы хотите, чтобы он работал как «часы», вы можете сделать while clear; do date; command;sleep 5; done Ничего себе, спасибо за while sleep комбинацию, экономит нажатия клавиш!

Одна из проблем, которые есть во всех ответах, опубликованных до сих пор, заключается в том, что время выполнения команды может измениться. Например, если вы выполняете sleep 10 команды между командами, а выполнение команды занимает 2 секунды, то она будет выполняться каждые 12 секунд; если для запуска требуется переменное количество времени, то в течение длительного времени время его выполнения может быть непредсказуемым.

Это может быть именно то, что вы хотите; если это так, используйте одно из других решений или используйте это, но упростите sleep вызов.

Для разрешения в одну минуту задания cron будут выполняться в указанное время, независимо от того, сколько времени занимает каждая команда. (На самом деле новое задание cron будет запущено, даже если предыдущее еще выполняется.)

Вот простой Perl-скрипт, который спит до следующего интервала, поэтому, например, с интервалом в 10 секунд команда может выполняться в 12:34:00, 12:34:10, 12:34:20 и т. Д., Даже если Сама команда занимает несколько секунд. Если команда выполняется более interval секунд, следующий интервал будет пропущен (в отличие от cron). Интервал вычисляется относительно эпохи, поэтому интервал 86400 секунд (1 день) будет выполняться в полночь по UTC.

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

По умолчанию команда watch linux включена почти во все дистрибутивы Linux. Ее задача — запускать указанную пользователем команду через определенные промежутки времени и печатать вывод этой команды в окне терминала. Работу watch можно сравнить с работой tail, с той лишь разницей, что источником вывода является не файл журнала, а другая команда.

Команда watch в Linux

Синтаксис и опции

Синтаксис команды watch крайне прост:

watch опции команда_для_вывода

Перечень опций невелик, но их достаточно для эффективного использования команды:

  • -d (--differences) — служит для выделения тех данных в выводе команды, которые отличаются от предыдущих.
  • -n (--interval seconds) — позволяет установить желаемый интервал запуска команды.
  • -t (--no-title) — выключает отображение заголовков.
  • -b (--beep) — если при выполнении команды возникнет ошибка, будет подан звуковой сигнал.
  • -e (--errexit) — при возникновении ошибки вывод данных будет заморожен, команда watch прекратит работу после нажатия комбинации клавиш.
  • -g (--chgexit) — выход при условии, что в выводе команды обнаружатся изменения.
  • -c (--color) — интерпретирует последовательность цветов и стилей ANSI.
  • -x (--exec) — выполнение команды будет передано интерпретатору sh -c поэтому, возможно, вам придется использовать дополнительные кавычки чтобы добиться желаемого эффекта. При использовании полной версии написания (--exec) команда будет выполняться в с помощью утилиты exec.

Примеры использования watch

Проще всего продемонстрировать работу команды watch, наблюдая за тем, как компьютер использует оперативную память:


В данном случае не были использованы опции команды watch, зато к выполняемой команде free пришлось добавить параметр -m, который отвечает за отображение свободной памяти RAM. Так тоже можно и нужно делать, чтобы получить искомый результат.

Чтобы не запоминать каким был предыдущий результат вывода и не отслеживать изменения самостоятельно, стоит поручить эту работу опции -d. Она подсвечивает ту информацию, которая отличается от предыдущей:


На каждом из скриншотов в верхней строке есть надпись «Every 2,0s». Она означает, что программа перезапускается каждые 2 секунды. Этот интервал установлен по умолчанию, но его можно изменить, используя опцию -n.

watch -n5 -d 'cat /proc/loadavg'


Обратите внимание на то, что значение -n не может быть меньше 1. Верхняя планка не ограничена.

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


Интервал обновления, опции команды и текущая дата больше не отображаются.

Что касается выхода из утилиты watch, то он осуществляется при нажатии клавиш Ctrl+C или Ctrl+Z. Пока пользователь не воспользуется одной из этих комбинаций, команда будет выполняться с заданными параметрами.

Выводы

Команда watch linux — это простой и эффективный инструмент для всех, кто занимается администрированием серверов. Впрочем, и обычные пользователи могут найти ей применение. Если у вас возникли вопросы относительно использования watch на компьютерах с установленной операционной системой Linux, задавайте их в комментариях.

Нет похожих записей


Статья распространяется под лицензией Creative Commons ShareAlike 4.0 при копировании материала ссылка на источник обязательна.

Оригинал: Linux watch Command Tutorial for Beginners (5 Examples)
Автор: Himanshu Arora
Дата публикации: 1 мая 2018 года
Перевод: А. Кривошей
Дата перевода: октябрь 2018 г.

Иногда, работая в командной строке Linux, вам может понадобиться выполнить команду повторно, чтобы отследить изменения в выводе. Вы, вероятно, обрадуетесь, когда узнаете, что есть утилита командной строки, которая позволяет это делать. Она называется Watch, и в этом руководстве мы обсудим ее основные функции, используя несколько простых для понимания примеров.

Прежде чем мы это сделаем, необходимо отметить, что все примеры, используемые в этой статье, были протестированы на Ubuntu 16.04 LTS.

Команда watch

Как уже упоминалось, утилита watch позволяет выполнять команду несколько раз. Ниже приведен синтаксис этой команды:

И вот как описывает ее работу man-страница утилиты:

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

Ниже приведены некоторые примеры в стиле "вопрос/ответ", которые должны дать вам представление о том, как работает команда watch.

Q1. Как работает команда watch?

В целом использовать watch очень просто - все, что вам нужно сделать, - запустить утилиту с именем команды в качестве входного параметра. Например:

В моей системе вышеприведенная команда выдала следующий результат:

watch date

В первой строке вывода указывается, что вывод команды «date» обновляется через каждые 2 секунды (это интервал времени по умолчанию), далее следует текущая дата/время системы. Вторая строка - это фактический вывод команды «date», который обновляется через каждые пару секунд.

Q2. Как заставить watch выделять отличия в выводе команды?

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

Это можно сделать с помощью параметра командной строки -d. Например:

И вот как теперь команда watch подсвечивает изменения:

watch подсвечивает изменения

Q3. Как настроить интервал обновления?

Как уже упоминалось, интервал обновления по умолчанию составляет 2 секунды. Однако, если вы хотите, вы можете изменить это значение, используя параметр командной строки -n.

Теперь команда будет следить за тем, чтобы результат обновлялся каждые 5 секунд. Обратите внимание, что интервалы менее 0,1 секунды не допускаются.

Q4. Как отключить заголовок в выводе?

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

Так выглядит вывод приведенной выше команды:

отключение заголовков

Q5. Как заставить watch завершать работу при изменении вывода?

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

Таким образом, если потребление памяти в системе изменится, команда watch завершит работу.

Заключение

Как вы уже поняли, watch - отличный способ отслеживать изменения, будь то на уровне системы, на уровне каталогов или даже на уровне файлов. Здесь мы обсудили несколько ключевых параметров командной строки watch. Для получения более подробной информации зайдите на man-страницу утилиты.

Планирование задач Linux, периодическое выполнение задач

каталог

Выполнить задачу в определенное время в будущем: в, партия

Периодически запускать задачу: cron

Почтовый сервис

SMTP: простой протокол передачи почты, используемый для отправки почты

POP3:Post Office Protocol

IMAP4:Internet Mail Access Protocol

MUA:Mail User Agent

mailx - send and receive Internet mail

mailx [-s 'SUBJECT'] username[@hostname]

Генерация почтового тела:

Дай прямо, Ctrl + d

(2) перенаправление ввода


echo -e "How are you?\nHow old are you?" | mail

Одна и одна миссия

noon, midnight, teatime



Обычно используемые варианты:

-L: список заданий, ожидающих запуска в указанной очереди, эквивалентно atq

-D: удалить указанное задание; эквивалентно atrm

-C: просмотреть конкретные рабочие задания

-F / path / from / somefile: чтение задач из указанного файла



Уведомлять связанных пользователей о результатах выполнения заданий P.S. по электронной почте

2.batch

Пусть система выберет свободное время для выполнения задач, указанных здесь

Во-вторых, периодический план задачи: cron

1. Связанные пакеты

cronie:Основной пакет, который предоставляет демон crond и связанные вспомогательные инструменты

cronie-anacron:Вспомогательная программа Cronie, используемая для контроля состояния выполнения задачи cronie; если задача в Cronie не выполнялась нормально в прошлом времени, анакрон запустит задачу впоследствии

crontabs:Содержит CentOS для выполнения задач по обслуживанию системы

Как убедиться, что демон crond запущен

systemctl status crond

service crond status

Отправляйте задачи, запланированные для периодического выполнения, в crond, который будет реализован до конца

Задачи cron системы: задания по обслуживанию системы

Задачи пользователя cron:

2. Системные задачи cron


Пример: запустить команду echo в 9:10 вечера;

10 21 * * * gentoo /bin/echo "Howdy!"

P.S. Команда здесь лучше всего использовать абсолютный путь

Представление времени:

Значение в пределах допустимого диапазона значений в данный момент времени. Это значение в данный момент времени.

Все значения в пределах допустимого диапазона значений в данный момент времени являются всеми значениями в пределах диапазона допустимых значений в данный момент времени.

⑤ Определите размер шага в указанном диапазоне времени:

Например: команда echo каждые 3 часа;

0 */3 * * * gentoo /bin/echo "howdy!"

3. пользователь cron

Команда crontab определяет, что у каждого пользователя есть отдельный файл задачи cron: / var / spool / cron / USERNAME


crontab [-u user] [-l | -r | -e] [-i]

-L: список всех задач

-E: редактирование задачи

-R: удалить все задачи

-I: использовать с -r, чтобы позволить пользователям выборочно удалять указанные задачи в интерактивном режиме

-u пользователь: может работать только root, управлять задачами cron для указанного пользователя

Уведомить связанных пользователей по электронной почте о результатах P.S.

Для задач cron% имеет специальное назначение: если вы хотите использовать% в команде, вам нужно его избежать, однако, если вы поместите% в одинарные кавычки, вы также можете выйти

мышление:

① Как мне запустить задачу на втором уровне?

* * * * * for min in 0 1 2; do echo "hi"; sleep 20; done

② Как добиться выполнения задачи каждые 7 минут?

sleep Команда:

Второй по умолчанию. Секунды, по умолчанию

Очки заключаются в следующем:

Часы: Часы: Часы: Часы: часы

Дни дня следующие:

обзор

Выполнить задачу сразу: при, партия

Циклически выполнять задачу: cron-> anacron

Ссылки:

Интеллектуальная рекомендация

Поверните строку в целые числа

Тема Описание Преобразуйте строку в целое число (реализация функции integer.valueof (строка), но строка не совпадает 0), требуя функции библиотеки, которая нельзя использовать для преобразования целых.

Docker создает репликацию Redis Master-Slave

Centos установить докер быстрый старт докера Создать Dockerfile Поместите файл на сервер Linux, создайте папку / usr / docker / redis и поместите его в этот каталог Выполните следующий код в каталоге .


Установка GateOne на новом CentOS7

Установка GateOne на новом CentOS7 В последнее время исследуются такие инструменты, как WebSSH2, в настоящее время требуется встроить терминал ssh в веб-приложение и найти GateOne. GateOne - это веб-в.


Примечания к исследованию Qt4 (5), QWaitCondition of QThread Learning


Практические занятия: решения проблем системы управления обучением

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

Вам также может понравиться


искробезопасная практика (5) обратный индекс

задний план Поисковые системы обычно создают инвертированный индекс ключевых слов. Ключевое слово - индекс, за которым следуют веб-страницы, содержащие ключевое слово. На этот раз, используя данные мо.


Решение центра тяжести неправильного многоугольника

Справочник статей Во-первых, решение центра тяжести неправильных многоугольников 1.1 Метод расчета треугольника центра тяжести 1.2 Метод расчета площади треугольника 1.3 Метод расчета площади полигона.

Читайте также: