Автор Тема: Периодично изпълняване на команда с кратки интервали  (Прочетена 2137 пъти)

Vatman

  • Напреднали
  • *****
  • Публикации: 315
  • Distribution: openSuSE 11.3
  • Window Manager: KDE 4.4
    • Профил
    • WWW
Имаше една команда, чрез която изпълнява друга такава през даден интервал от време. Например
Цитат
{нещо си - 1} acpi -V| grep Thermal
и така през една секунда ще ми дава температурата.

--zeridon: редакция на заглавие
« Последна редакция: Mar 23, 2009, 00:09 от zeridon »
Активен

Момчета, нищо не разбирам от компютри, научете ме да съм хакер.

zeridon

  • Killmode enabled
  • Administrator
  • Напреднали
  • *****
  • Публикации: 1398
  • Distribution: Debian/Ubuntu
  • Window Manager: console/Gnome
  • BOfH
    • Профил
    • WWW
Re: Забравена команда
« Отговор #1 -: Mar 18, 2009, 16:22 »
По принцип командата е at но по спомени тя няма резолюция от 1 секунда.

Друг вариант е с един безкраен цикъл от типа

Код
GeSHi (Bash):
  1. while true ; do
  2. acpi -V| grep Thermal
  3. wait 1
  4. done
Активен

Внмимавай имам клещи за кабел
http://www.netsecad.com/
http://theregister.co.uk/odds/bofh/

Hapkoc

  • Напреднали
  • *****
  • Публикации: 2117
    • Профил
Re: Забравена команда
« Отговор #2 -: Mar 18, 2009, 16:38 »
watch, обаче е -n 1 параметърът и трябва да сложиш в кавички командата, която се изпълнява ако има pipe:

watch -n 1 'acpi -V| grep Thermal'
Активен

phantomlord

  • Напреднали
  • *****
  • Публикации: 1832
  • Distribution: Debian Sid
  • Window Manager: KDE 4
  • Fall to your knees and bow to the Phantom Lord
    • Профил
    • WWW
Re: Забравена команда
« Отговор #3 -: Mar 18, 2009, 20:12 »
Мммм, това е много полезно :) Също може да се ползва и за нещо такова:
Код
GeSHi (Bash):
  1. watch -n 1 'dmesg|tail'
Активен

http://myfreesoft.net/phpBB2/index.php?c=7
Помогни си сам, за да ти помогне и Господ
Linux - connecting people...

Vatman

  • Напреднали
  • *****
  • Публикации: 315
  • Distribution: openSuSE 11.3
  • Window Manager: KDE 4.4
    • Профил
    • WWW
Re: Забравена команда
« Отговор #4 -: Mar 18, 2009, 21:05 »
мерси много. То за много неща може да се ползва, но за мен ми е да следя в реално време разни неща.
« Последна редакция: Mar 18, 2009, 21:08 от Vatman »
Активен

Момчета, нищо не разбирам от компютри, научете ме да съм хакер.

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Забравена команда
« Отговор #5 -: Mar 18, 2009, 23:30 »
Мммм, това е много полезно :) Също може да се ползва и за нещо такова:
Код
GeSHi (Bash):
  1. watch -n 1 'dmesg|tail'

Специално в този случай бих предпочел:
Код
GeSHi (Bash):
  1. tail -f /var/log/dmesg

:)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

phantomlord

  • Напреднали
  • *****
  • Публикации: 1832
  • Distribution: Debian Sid
  • Window Manager: KDE 4
  • Fall to your knees and bow to the Phantom Lord
    • Профил
    • WWW
Re: Забравена команда
« Отговор #6 -: Mar 19, 2009, 08:34 »
Мммм, това е много полезно :) Също може да се ползва и за нещо такова:
Код
GeSHi (Bash):
  1. watch -n 1 'dmesg|tail'

Специално в този случай бих предпочел:
Код
GeSHi (Bash):
  1. tail -f /var/log/dmesg

:)
Да, ама dmesg|tail можеш да го гледаш като юзър, а tail -f /var/log/dmesg по принцип като root :)
Активен

http://myfreesoft.net/phpBB2/index.php?c=7
Помогни си сам, за да ти помогне и Господ
Linux - connecting people...

VladSun

  • Напреднали
  • *****
  • Публикации: 2166
    • Профил
Re: Забравена команда
« Отговор #7 -: Mar 19, 2009, 11:00 »
Прав си :)
Активен

KISS Principle ( Keep-It-Short-and-Simple )
http://openfmi.net/projects/flattc/
Има 10 вида хора на този свят - разбиращи двоичния код и тези, които не го разбират :P

mikis

  • Напреднали
  • *****
  • Публикации: 746
  • Distribution: Debian Testing
  • Window Manager: KDE
    • Профил
Re: Забравена команда
« Отговор #8 -: Mar 19, 2009, 21:41 »
Това наистина е полезно, нека някой да смени заглавието на темата.
Активен

oracle77

  • Участници
  • ***
  • Публикации: 8
    • Профил
Здравейте!
Пръво бих искал да се извиня за това, че пиша пост и в тази тема, но надявам се да ме разберете. ( просто темите са много сходни ).
Бих искал да помоля ако може някой да ми помогне.
Става въпрос за следното:
Въобще не съм запознат със ОС Линукс и командите и, а понеже сървъра, на който съм качил файловете ( РНР и HTML ) на сайта ми е с такава система изпитвам затруднение със стартирането / и оставането му стартиран / на един от тези РНР-файлове. Става въпрос за файл, който прави проверки в БД и ги сравнява с час и други фактори, но трябва да е включен на сървъра /или да изпълнява действие през 1 сек./.
Засега се оправям някак, като съм стартирал през Cron Scheduled Tasks съответния файл / благодарение на neter и всички останали, взели участие в темата http://www.linux-bg.org/forum/index.php?topic=34263.0 с командата curl http://adres.na.saita/file.рнр >/dev/null , на които много благодаря /, но сайта не може да работи пълноценно, защото при старта си ( примерно в час,мин,01 сек. - стартира на всяка кръгла минута ) изпълнява командата и спира ( въпреки, че ако се стартира от браузъра ми изпълнява тази команда безкрайно ). Бяха направени промени в скрипта на въпросния файл, но без резултат - най-добрия, постигнат беше да стартира по горепосочения начин.
Някой може ли да помогне и каже как би могло да стане така, че или файла да остане включен на сървъра, или да изпълнява заявка в безкрайност ( т.е. - пак да си остане стартиран, но ... )
Благодаря Ви предварително!
Успех!
Активен

neter

  • Global Moderator
  • Напреднали
  • *****
  • Публикации: 3408
  • Distribution: Debian, SailfishOS, CentOS
  • Window Manager: LXDE, Lipstick
    • Профил
    • WWW
Удобно е да използваш цикъла, който показа zeridon
Код
GeSHi (Bash):
  1. #!/bin/bash
  2.  
  3. while true ; do
  4. /usr/bin/curl http://adres.na.saita/file.php >/dev/null
  5. wait 1
  6. done
Принципно, най-добре е този цикъл да се сложи в един изпълним файл и да се изпълни директно на сървъра. Така ще си се изпълнява постоянно и ще бъде прекъснат чак когато процесът му бъде убит. Но тъй като ти (доколкото разбрах) нямаш достъп до конзолата на сървъра, ето ти алгоритъм за cron:
1. Създай си файл (за примера ще използвам име на този файл script), който е видим от cron, и го направи изпълним;
2. Сложи в него цикъла;
3. Направи си друг файл, който също да е видим от cron, направи и него изпълним и сложи следното съдържание в него
Код
GeSHi (Bash):
  1. #!/bin/bash
  2. /usr/bin/killall script
Целта на този файл е да изключва script, за да може cron-ът да го пусне отново, тъй като cron няма опция за единично изпълнение и при следващото си завъртане ще пусне второ копие на файла с цикъла, а това не е желателно. Не забравяй да замениш script с името на файла, в който сложи цикъла;
4. Сложи си две cron задачи, които ще изпълняват тези два скрипта. Нужно е вторият скрипт (този с killall) да се изпълнява преди скрипта с цикъла
Цитат
5 6 25 3 * /пълен/път/до/скрипта/с/killall
6 6 25 3 * /пълен/път/до/скрипта/с/цикъла &
Така, първият скрипт ще бъде изпълняван всяка година на 25 март в 06:05 часа и ще изключва настоящо включения цикъл, а вторият скрипт ще се изпълнява всяка година на 25 март в 06:06 часа (т.е., една минута по-късно, когато старият цикъл вече е спрян) и ще зарежда нов цикъл.
Принципно, задачата може да бъде събрана и в един скрипт - като се зададе колко пъти да се завърти цикъла, което време на изпълнение на всички завъртания да съвпада с времето до следващото изпълнение от cron. Това, обаче, е малко чуплив метод, тъй като е възможно някой път да се случат забавяния в изпълнението на цикъла и така времето за изпълнение на всички завъртания на цикъла да надвиши времето до следващото изпълнение от cron, което би довело до едновременна работа известно време на два процеса с цикъла. Ти решаваш ;)
« Последна редакция: Mar 24, 2009, 18:37 от neter »
Активен

"Да си добре приспособен към болно общество не е признак за добро здраве" - Джиду Кришнамурти