Linux выполнение команды через интервал времени

Repeat command automatically in Linux

to check if the file size is increasing. I would like to have a command to have this repeat automatically.

14 Answers 14

If you wish to have visual confirmation of changes, append —differences prior to the ls command.

According to the OSX man page, there’s also

The —cumulative option makes highlighting «sticky», presenting a running display of all positions that have ever changed. The -t or —no-title option turns off the header showing the interval, command, and current time at the top of the display, as well as the following blank line.

Linux/Unix man page can be found here

Note that you need to escape special characters that are part of the command that you are watching, for example: watch mysql dbname -e \»show processlist\;\»

watch can also be used with multiple commands, quoted and semicolon-separated, like this: watch -n 5 «ls -l; echo; ps -aux» . For discussion see askubuntu.com/q/595927/846840

while true; do sleep 5 ls -l done 

watch also has the unfortunate side effect of clearing the screen, so sometimes the loop is useful. Which to use depends on the desired format of the output.

I’ll usually do the loop, but do it on one line. Watch looks much better, though, I’ll have to switch to that.

It’s worth noting you can use —differences to have them highlighted (If you’re concerned about the repainting of the terminal)

This is better than watch . Watch does not work for example when you want to generated random number in each invocation, e.g. watch -n 1 echo $ . The random will only get called once.

«watch» does not allow fractions of a second in Busybox, while «sleep» does. If that matters to you, try this:

while true; do ls -l; sleep .5; done 

Thanks. This works for busybox consoles that do not have the watch command. I used it to measure the uptime of my system: while true; do uptime; sleep 1; done

FWIW on the old version of busybox (v1.11.2) I’m stuck with, there is no watch, and sleep doesn’t support fractions. But you can use sleep 1 successfully.

sleep already returns 0 . As such, I’m using:

while sleep 3 ; do ls -l ; done 

This is a tiny bit shorter than mikhail’s solution. A minor drawback is that it sleeps before running the target command for the first time.

If the command contains some special characters such as pipes and quotes, the command needs to be padded with quotes. For example, to repeat ls -l | grep «txt» , the watch command should be:

I was having trouble getting watch to work properly on a piped expression, but after reading this I could fix it 🙂

Running commands periodically without cron is possible when we go with 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 & 

Do not forget the last & as it will put your loop in the background. But you need to find the process id with command «ps -ef | grep your_script» then you need to kill it. So kindly add the ‘&’ when you running the script.

Читайте также:  Postgresql pgadmin 4 linux mint

Here is the same loop as a script. Create file «while_check.sh» and put this in it:

#!/bin/bash while true; do echo "Hello World" # Substitute this line for whatever command you want. sleep 100 done 

Then run it by typing bash ./while_check.sh &

Isn’t the last & , same as writing the command without & in the end , but calling the script with & : bash ./while_check.sh & ?

@ransh : We can run the script ./while_check.sh & so we can get the process id immediately, when we add the & in script and just run the script without & , we didn’t get any process id but it will run background, as i edited we need ps command to get the process id if we need to stop the script.

If you wish, you can modify the script to echo $! after each background process is launched — that’s the PID of the last child process launched in the background.

echo `date` is just a poor and slightly buggy way to write just date . (The bug has to do with the lack of quoting of the argument to echo .) See also useless use of echo .

watch is good but will clean the screen.

watch -n 1 'ps aux | grep php' 

If you want to do something a specific number of times in zsh :

repeat 300 (command1; command2) && sleep 1.5 

Note that repeat is not a bash command.

Your answer is a lot downvoted. Reason seem to be: This is not bash!! Please explain under which environment did this work!

If you want to avoid «drifting», meaning you want the command to execute every N seconds regardless of how long the command takes (assuming it takes less than N seconds), here’s some bash that will repeat a command every 5 seconds with one-second accuracy (and will print out a warning if it can’t keep up):

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 

It may still drift a little since the sleep is only accurate to one second. You could improve this accuracy by creative use of the date command.

Thanks.. but I have 2 questions, 1- where to save that code? in other word, In which path should I put the file containing that script? that makes it run automatically?! 2- how to include php file in ( # do command ) instead of typing all my code there?

Читайте также:  Команда линукс обновить все

I suggest you research a bit on bash scripts so you can understand the basics of how to run them and so forth.

You can run the following and filter the size only. If your file was called somefilename you can do the following

while :; do ls -lh | awk ‘/some*/’; sleep 5; done

A concise solution, which is particularly useful if you want to run the command repeatedly until it fails, and lets you see all output.

while ls -l; do sleep 5 done 

To minimize drift more easily, use:

while :; do sleep 1m & some-command; wait; done 

there will still be a tiny amount of drift due to bash’s time to run the loop structure and the sleep command to actually execute.

Will Run ls -l command after every 5s

Output :-

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 

Источник

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

Вы когда-нибудь были в ситуации, когда вам приходилось несколько раз запускать определенную команду Linux?

Ну, если вы еще не знаете , этот учебник научит вас, как это сделать.

Конечно, вы можете сделать это, используя скрипт оболочки или задания cron.

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

Вот где команда Watch пригодится.

Эта команда может использоваться для повторного выполнения данной команды и контроля вывода в полноэкранном режиме.

Чтобы выразить это простыми словами, мы можем использовать команду Watch для запуска команды Linux каждые X секунд навсегда, и команда будет продолжать отображать вывод в консоли до тех пор, пока мы не остановим ее вручную, нажав CTRL + C, или убейте процесс или заставьте систему перезагрузится .

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

Запуск команды Linux каждые X секунд

Ниже я привел пять примеров, объясняющих, где вы можете использовать команду watch для повторного запуска определенных команд Linux.

Читайте также:  Linux get current dir

Пример 1:

Скажем, вы хотите запустить команду «uptime» каждые 2 секунды, чтобы контролировать время безотказной работы вашей системы.

Для этого просто запустите:

Every 2.0s: uptime sk Wed Feb 9 20:14:46 2018 20:15:46 up 2:38, 1 users, load average: 0.41, 0.35, 0.46
  • Every 2.0s: время безотказной работы – команда «uptime» запускается каждые 2 секунды и отображает результат.
  • sk – текущий пользователь
  • Wed Feb 9 20:14:46 2018 – текущая дата и время, когда мы выполнили команду.

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

Чтобы выйти из команды, нажмите CTRL + C.

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

Пример 2

Как я упоминал ранее, команда watch выполняет программу каждые 2 секунды по умолчанию.

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

Отобразим использование дискового пространства файловой системы каждые 5 секунд.

Every 5.0s: df -h sk: Wed May 9 20:19:09 2018 Filesystem Size Used Avail Use% Mounted on dev 3.9G 0 3.9G 0% /dev run 3.9G 1.1M 3.9G 1% /run /dev/sda2 457G 357G 77G 83% / tmpfs 3.9G 32M 3.9G 1% /dev/shm tmpfs 3.9G 0 3.9G 0% /sys/fs/cgroup tmpfs 3.9G 36K 3.9G 1% /tmp /dev/loop0 83M 83M 0 100% /var/lib/snapd/snap/core/4327 /dev/sda1 93M 55M 32M 64% /boot tmpfs 789M 28K 789M 1% /run/user/1000

Чтобы проверить, действительно ли эта команда работает, создайте или удалите любой файл / папку.

Вы заметите, что свободное пространство изменилось на выходе после создания или удаления файлов / папок.

Чтобы просмотреть содержимое каталога, запустите:

Здесь флаг «-d или -differences» будет выделять различия между последовательными обновлениями.

total 3857440 -rw------- 1 sk users 1921843200 Apr 25 22:47 bionic-desktop-amd64.iso -rw------- 1 sk users 1921843200 Apr 25 03:02 bionic-desktop-amd64.iso.zs-old drwxr-xr-x 2 sk users 12288 May 8 18:45 Desktop drwxr-xr-x 2 sk users 4096 Apr 20 16:54 Documents drwxr-xr-x 11 sk users 4096 May 9 19:56 Downloads drwxr-xr-x 2 sk users 4096 Jan 7 2017 Music drwxr-xr-x 5 sk users 12288 Mar 23 17:34 Pictures drwxr-xr-x 2 sk users 4096 May 11 2016 Public

Кроме того, вы можете отображать содержимое изменения каталога, которое принадлежит определенному пользователю ( например sk).

Это может быть полезно в многопользовательской системе.

Пример 4

Чтобы отобразить информацию о памяти, запустите:

Пример 5

Для отображения вывода команды du каждые 10 секунд вы можете использовать:

Every 10.0s: du -h sk: Wed May 9 20:26:43 2018 17M ./.disruptive innovations sarl/bluegriffon/q87d9o6v.default/extensions 16K ./.dooble/Dooble 4.0K ./.dooble/Histories 176K ./.dooble 4.0K ./.PlayOnLinux/wine/mono 13M ./.PlayOnLinux/wine/gecko 4.0K ./.PlayOnLinux/wine/linux-amd64 652K ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine/fonts 872K ./.PlayOnLinux/wine/linux-x86/1.3.19/share/wine

Это действие отслеживает использование диска каждые 10 секунд, пока вы не выйдете из режима ti вручную.

Заключение

Теперь вы знаете, как выполнять команду каждые X секунд с помощью команды «watch».

Как правило, команда Watch используется для мониторинга использования диска и использования памяти.

Не путайте эту команду с другими инструментами мониторинга.

Эта команда намеревается выполнить команду каждую конкретную секунду всегда, пока вы ее не остановите вручную.

Источник

Оцените статью
Adblock
detector