Возможно ли в командной строке Linux повторять команду каждые n секунд?
Скажем, у меня запущен импорт, и я делаю
ls -l
проверить, увеличивается ли размер файла. Я хотел бы получить команду, чтобы это повторилось автоматически.
Смотрите каждые 5 секунд ...
watch -n 5 ls -l
Если вы хотите получить визуальное подтверждение изменений, добавьте --differences
доls
командой.
Согласно справочной странице OSX, есть также
Опция --cumulative делает подсветку «липкой», отображая текущее отображение всех когда-либо измененных позиций. Параметр -t или --no-title отключает заголовок, показывающий интервал, команду и текущее время в верхней части экрана, а также следующую пустую строку.
Справочную страницу по Linux / Unix можно найти здесь
watch mysql dbname -e \"show processlist\;\"
brew install watch
источник
watch
также имеет неприятный побочный эффект очистки экрана, поэтому иногда цикл полезен. Какой из них использовать, зависит от желаемого формата вывода.--differences
их для выделения (если вас беспокоит перекраска терминала)watch
. Часы не работают, например, когда вы хотите генерировать случайное число в каждом вызове, напримерwatch -n 1 echo ${RANDOM}
. Случайный будет вызван только один раз.«смотреть» не позволяет доли секунды в Busybox, в то время как «спать» делает. Если это важно для вас, попробуйте это:
источник
sleep
уже возвращается0
. Поэтому я использую:Это немного короче, чем решение Михаила. Небольшим недостатком является то, что он спит перед первым запуском целевой команды.
источник
Если команда содержит некоторые специальные символы, такие как каналы и кавычки, ее необходимо дополнить кавычками. Например, чтобы повторить
ls -l | grep "txt"
, команда watch должна быть:watch -n 5 'ls -l | grep "txt"'
источник
Периодически запускать команды без cron возможно, когда мы идем с
while
.Как команда:
Пример:
Не забывайте последнее, так
&
как оно поместит ваш цикл в фоновом режиме. Но вам нужно найти идентификатор процесса с помощью команды "ps -ef | grep your_script", а затем убить его. Поэтому, пожалуйста, добавьте «&» при запуске скрипта.Здесь тот же цикл, что и в сценарии. Создайте файл while_check.sh и поместите в него:
Затем запустите его, набрав
bash ./while_check.sh &
источник
echo $!
после запуска каждого фонового процесса - это PID последнего дочернего процесса, запущенного в фоновом режиме.echo `date`
это просто плохой и слегка глючный способ написать простоdate
. (Ошибка связана с отсутствием цитирования аргументаecho
.) Смотрите также бесполезное использованиеecho
.смотреть хорошо, но будет чистить экран.
источник
Если вы хотите избежать «дрейфа», то есть вы хотите, чтобы команда выполнялась каждые N секунд, независимо от того, сколько времени она занимает (предполагая, что она занимает менее N секунд), вот некоторый bash, который будет повторять команду каждые 5 секунд с вторая точность (и выведет предупреждение, если оно не успевает):
Это может все еще немного дрейфовать, так как сон точен только на одну секунду. Вы можете улучшить эту точность путем творческого использования команды даты.
источник
Если вы хотите сделать что-то определенное количество раз, вы всегда можете сделать это:
источник
for x in {1..300} ; do
команд bash do||break;sleep 1.5; done
Вы можете запустить следующее и отфильтровать только размер. Если ваш файл был вызван,
somefilename
вы можете сделать следующееwhile :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Одна из многих идей.
источник
Чтобы свести к минимуму дрейф легче, используйте:
из-за времени bash на запуск структуры цикла и команды sleep для фактического выполнения все равно будет небольшой сдвиг.
подсказка: ':' имеет значение 0, т.е.
источник
Будет запускать
ls -l
команду через каждые 5 секундВывод :-
источник
Краткое решение, которое особенно полезно, если вы хотите выполнить команду несколько раз, пока она не завершится с ошибкой, и позволяет увидеть весь вывод.
источник