Как я могу повторять команду каждый интервал времени, чтобы она позволяла мне запускать команды для проверки или мониторинга каталогов?
Нет необходимости в скрипте, мне нужно просто выполнить простую команду в терминале.
Как я могу повторять команду каждый интервал времени, чтобы она позволяла мне запускать команды для проверки или мониторинга каталогов?
Нет необходимости в скрипте, мне нужно просто выполнить простую команду в терминале.
Вы можете использовать watch
команду, часы используются для запуска любой назначенной команды через равные промежутки времени.
Откройте Терминал и введите:
watch -n x <your command>
замените x на желаемое время в секундах.
Для получения дополнительной помощи, используя watch
команду и ее параметры, запустите man watch
или перейдите по этой ссылке .
Например: следующее будет каждые 60 с отображать на одном и том же терминале содержимое каталога Desktop, чтобы вы могли знать, произошли ли какие-либо изменения:
watch -n 60 ls -l ~/Desktop
watch -n 1 'echo $COLUMNS'
иwatch -n 1 echo $COLUMNS
при изменении размера вашего терминала - первый расширяется каждую секунду, но последний расширяется только один раз передwatch
запуском.watch
с командой типа «история включена»? Я люблю использоватьwatch
, но иногда я предпочитаю видеть журнал предыдущих выполнений, а не только последнее. И да, я знаю, что для этого могу использовать scripting (while true
), но использованиеwatch
утилиты намного чище!Вы также можете использовать эту команду в терминале, кроме ответа nux:
пример
Эта команда напечатает вывод
ls
с интервалом в 2 секунды.Используйте Ctrl+, Cчтобы остановить процесс.
Есть несколько недостатков
watch
watch
будет интерпретировать цветовые последовательности ANSI, передающие управляющие символы, используя-c
или--color
. Например, выводpygmentize
будет работать, но не удастсяls --color=auto
.В вышеуказанных обстоятельствах это может показаться лучшим вариантом.
источник
watch
существует для этого, это немного бесполезно, я бы сказалwatch
это хорошо в большинстве случаев. Вот почему я упомянул «помимо ответа nux» в начале. Но есть несколько проблем,watch
например. Один не может использовать какие-либо команды с псевдонимамиwatch
. Возьмем, к примеру,ll
псевдоним, которыйls -laF
нельзя использовать сwatch
. Также в случае, если вывод какой-либо команды достаточно длинный, у вас будут проблемы с прокруткойwatch
. В этих нескольких особых случаях этот ответ может оказаться лучшим вариантом.watch
по крайней мере, позволяет использовать опции-c
или--color
для цветного вывода.while sleep x
лучше - легче убитьwatch
нее, она хранит историю команд.Просто хотел ответить на вопросы от suravc и nux :
watch
будет отлично работать в Ubuntu, вы можете избежать этого, если хотите, чтобы ваш «Unix-fu» был чистым - например, во FreeBSD, watch - это команда, «отслеживающая другую строку tty».while true; do command; sleep SECONDS; done
также есть один нюанс - ваша команда может быть труднее убить с помощью CTR + C . Вы можете предпочестьwhile sleep SECONDS; do command; done
- это не только короче, но и легче прерывать. Предостережение заключается в том, что сначала он будет переведен в спящий режим, а затем запустит вашу команду, поэтому вам придется подождать некоторое время,SECONDS
прежде чем произойдет первое появление команды.источник
sleep
вwhile
петле? Я не мог найти никакой разницы, Ctrl + C сломал петлю сразу ни на что.command
иsleep
сломался, только если вы убилиtrue
.Похоже, идеальная задача для
cron
демона, который позволяет выполнять периодические команды. Запуститеcrontab -e
команду, чтобы начать редактирование конфигурации cron вашего пользователя. Его формат задокументирован в crontab (5) . По сути, у вас есть пять полей, разделенных пробелом, и следуют команда:Например, если вы хотите запускать скрипт Python каждый вторник, 11:00:
Есть также некоторые специальные имена, которые заменяют время, например
@reboot
. Очень полезно, если вам нужно создать временный каталог. Из моего crontab (указан сcrontab -l
):источник
cron
работает за кулисами, а не в терминалеЕсли вы наблюдаете за файловой системой,
inotifywait
это замечательно и, безусловно, добавляет меньше нагрузки на вашу систему.Пример :
В 1-м терминале введите эту команду:
Затем во втором терминале любая команда, которая влияет на текущий каталог,
Затем в исходном терминале inotifywait проснется и сообщит о событии.
Или в петле
источник
grep something InALogFile|less
, это скрипт?.
я не могу пропустить команду.-m
для постоянного мониторинга без петель.Вы можете создать свою собственную
repeat
команду, выполнив следующие шаги; кредиты здесь :Сначала откройте ваш
.bash_aliases
файл:Затем вставьте эти строки внизу файла и сохраните:
В-третьих, либо закройте и снова откройте свой терминал, либо введите:
И вуаля ! Теперь вы можете использовать его так:
или же
источник
Вы можете использовать crontab. запустите команду
crontab -e
и откройте ее в предпочитаемом вами текстовом редакторе, затем добавьте эту строкуЭто будет запускать вашу команду каждые 10 минут
Это будет запускать вашу команду каждые 4 часа
Другое возможное решение
Х количество раз повторить.
У времени ждать, чтобы повторить.
Пример :
источник
Другая проблема, связанная с подходом «наблюдения», предложенным выше, заключается в том, что он отображает результат только после завершения процесса. «date; sleep 58; date» отобразит 2 даты только через 59 секунд ... Если вы запустите что-то, работающее в течение 4 минут, которое медленно отображает несколько страниц контента, вы на самом деле не увидите его.
С другой стороны, проблема с подходом «время» заключается в том, что он не учитывает продолжительность задачи.
При этом скрипт будет запускаться где-то каждую минуту, иногда это может занять 1 мин 40. Таким образом, даже если cron сможет запускать его каждую минуту, здесь это не так.
Таким образом, чтобы увидеть вывод на оболочке в том виде, как она сгенерирована, и ждать точного времени запроса, вам нужно посмотреть на время до и после, и выполнить цикл с while.
Что-то вроде:
Это выведет это:
Как видите, команда запускается каждую минуту:
Так что просто замените команду «sleep
echo $(( ( RANDOM % 30 ) + 1 ))
» на то, что вам нужно, и она будет запускаться на терминале / оболочке ровно каждую минуту. Если вы хотите другое расписание, просто измените «60» секунд на то, что вам нужно.Укороченная версия без отладочных строк:
источник