Возможно ли в командной строке linux повторять команду каждые n секунд.
Например, скажем, что у меня есть импорт, и я делаю
ls -l
чтобы проверить размер файла, увеличивается. Я хотел бы иметь команду, чтобы это автоматически повторялось.
Возможно ли в командной строке linux повторять команду каждые n секунд.
Например, скажем, что у меня есть импорт, и я делаю
ls -l
чтобы проверить размер файла, увеличивается. Я хотел бы иметь команду, чтобы это автоматически повторялось.
Смотреть каждые 5 секунд...
 watch -n 5 ls -l
Если вы хотите визуально подтвердить изменения, добавьте --differences до команды ls.
В соответствии с man-страницей OSX также есть
Параметр --кумулятивный делает выделение "липким", представляя показывая все позиции, которые когда-либо менялись. -t или --no-title отключает заголовок, показывающий интервал, команды и текущее время в верхней части дисплея, а также после пустой строки.
Страница руководства Linux/Unix находится здесь
while true; do
    sleep 5
    ls -l
done
"watch" не позволяет доли секунды в Busybox, в то время как "sleep" делает. Если это имеет значение для вас, попробуйте следующее:
while true; do ls -l; sleep .5; done
 sleep уже возвращает 0. Поэтому я использую:
while sleep 3 ; do ls -l ; done
Это немного короче, чем решение Михаила. Незначительным недостатком является то, что он спит перед первым запуском целевой команды.
Если команда содержит некоторые специальные символы, такие как трубы и кавычки, команда должна быть дополнена кавычками. Например, чтобы повторить ls -l | grep "txt", команда watch должна быть:
 watch -n 5 'ls -l | grep "txt"'
Запуск команд периодически без cron возможен, когда мы идем с while.
В качестве команды:
while true ; do command ; sleep 100 ; done &
[ ex: # while true;  do echo `date` ; sleep 2 ; done & ]
Пример:
while true
do echo "Hello World"
sleep 100
done &
Не забывайте последний &, поскольку он будет помещать ваш цикл в фоновом режиме. Но вам нужно найти идентификатор процесса с командой "ps -ef | grep your_script", тогда вам нужно его убить. Так что любезно добавьте '&' когда вы запускаете script.
# ./while_check.sh &
Вот тот же цикл, что и script. Создайте файл "while_check.sh" и поместите его в него:
#!/bin/bash
while true; do 
    echo "Hello World" # Substitute this line for whatever command you want.
    sleep 100
done
Затем запустите его, набрав bash ./while_check.sh &
часы хороши, но очистят экран.
watch -n 1 'ps aux | grep php'
Если вы хотите избежать "дрейфа", то есть хотите, чтобы команда выполняла каждую N секунд, независимо от того, сколько времени занимает команда (при условии, что она занимает меньше N секунд), здесь несколько bash, которые будут повторять команду каждый 5 секунд с точностью до одной секунды (и выдает предупреждение, если оно не может идти в ногу):
PERIOD=5
while [ 1 ]
do
    let lastup=`date +%s`
    # do command
    let diff=`date +%s`-$lastup
    if [ "$diff" -lt "$PERIOD" ]
    then
        sleep $(($PERIOD-$diff))
    elif [ "$diff" -gt "$PERIOD" ]
    then
        echo "Command took longer than iteration period of $PERIOD seconds!"
    fi
done
Он все еще может немного отклониться, так как сон остается точным только на одну секунду. Вы можете повысить эту точность за счет использования команды date.
 Вы можете запустить следующее и отфильтровать только размер. Если ваш файл называется somefilename вы можете сделать следующее
 while :; do ls -lh | awk '/some*/{print $5}'; sleep 5; done
Одна из многих идей.
Если вы хотите сделать что-то определенное количество раз, вы всегда можете это сделать:
repeat 300 do my first command here && sleep 1.5
Чтобы свести к минимуму дрейф, используйте:
while :; do sleep 1m & some-command; wait; done
по-прежнему будет небольшое количество дрейфа из-за bash времени для запуска структуры цикла и выполнения команды sleep для фактического выполнения.
hint: ':' evals to 0 ie true.
watch -n 5 'ls -l 
Запустит команду ls -l после каждого 5 секунд
Every 5.0s: ls -l                                                                                                      Fri Nov 17 16:28:25 2017
total 169548
-rw-rw-r--  1 sachin sachin     4292 Oct 18 12:16 About_us_Admission.doc
-rw-rw-r--  1 sachin sachin      865 Oct 13 15:26 About_us_At_glance.doc
-rw-rw-r--  1 sachin sachin     1816 Oct 13 16:11 About_us_Principle.doc
-rw-rw-r--  1 sachin sachin     1775 Oct 13 15:59 About_us_Vission_mission.doc
-rw-rw-r--  1 sachin sachin     1970 Oct 13 16:41 Academic_Middle_school.doc
-rw-rw-r--  1 sachin sachin      772 Oct 16 16:07 academics_High_School.doc
-rw-rw-r--  1 sachin sachin      648 Oct 16 13:34 academics_pre_primary.doc
-rw-rw-r--  1 sachin sachin      708 Oct 16 13:39 academics_primary.doc
-rwxrwxr-x  1 sachin sachin     8816 Nov  1 12:10 a.out
-rw-rw-r--  1 sachin sachin    23956 Oct 23 18:14 Ass1.c++
-rw-rw-r--  1 sachin sachin      342 Oct 23 22:13 Ass2.doc
drwxrwxr-x  2 sachin sachin     4096 Oct 19 10:45 Backtracking
drwxrwxr-x  3 sachin sachin     4096 Sep 23 20:09 BeautifulSoup
drwxrwxr-x  2 sachin sachin     4096 Nov  2 00:18 CL_1
drwxrwxr-x  2 sachin sachin     4096 Oct 23 20:16 Code
drwxr-xr-x  2 sachin sachin     4096 Nov 15 12:05 Desktop
-rw-rw-r--  1 sachin sachin        0 Oct 13 23:12 doc
drwxr-xr-x  4 sachin sachin     4096 Nov  6 21:18 Documents
drwxr-xr-x 27 sachin sachin    12288 Nov 17 13:23 Downloads
-rw-r--r--  1 sachin sachin     8980 Sep 19 23:58 examples.desktop
Еще одна петля в bash:
 Сделайте это repeat исполняемым файлом где-нибудь в вашем $PATH:
#!/bin/bash
n=$1
shift 1
for ((x=0; x<$n; ++x)); do
  "[email protected]"
done
так что позже вы можете:
 $ repeat 3 date
Краткое решение, которое особенно полезно, если вы хотите многократно запускать команду до тех пор, пока она не даст сбой, и позволит вам увидеть весь вывод.
while ls -l; do
    sleep 5
done