Linux за българи: Форуми

Linux секция за начинаещи => Настройка на програми => Темата е започната от: Vatman в Mar 18, 2009, 16:17



Титла: Периодично изпълняване на команда с кратки интервали
Публикувано от: Vatman в Mar 18, 2009, 16:17
Имаше една команда, чрез която изпълнява друга такава през даден интервал от време. Например
Цитат
{нещо си - 1} acpi -V| grep Thermal
и така през една секунда ще ми дава температурата.

--zeridon: редакция на заглавие


Титла: Re: Забравена команда
Публикувано от: zeridon в Mar 18, 2009, 16:22
По принцип командата е at но по спомени тя няма резолюция от 1 секунда.

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

Код
GeSHi (Bash):
  1. while true ; do
  2. acpi -V| grep Thermal
  3. wait 1
  4. done


Титла: Re: Забравена команда
Публикувано от: Hapkoc в Mar 18, 2009, 16:38
watch, обаче е -n 1 параметърът и трябва да сложиш в кавички командата, която се изпълнява ако има pipe:

watch -n 1 'acpi -V| grep Thermal'


Титла: Re: Забравена команда
Публикувано от: phantomlord в Mar 18, 2009, 20:12
Мммм, това е много полезно :) Също може да се ползва и за нещо такова:
Код
GeSHi (Bash):
  1. watch -n 1 'dmesg|tail'


Титла: Re: Забравена команда
Публикувано от: Vatman в Mar 18, 2009, 21:05
мерси много. То за много неща може да се ползва, но за мен ми е да следя в реално време разни неща.


Титла: Re: Забравена команда
Публикувано от: VladSun в Mar 18, 2009, 23:30
Мммм, това е много полезно :) Също може да се ползва и за нещо такова:
Код
GeSHi (Bash):
  1. watch -n 1 'dmesg|tail'

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

:)


Титла: Re: Забравена команда
Публикувано от: phantomlord в 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 :)


Титла: Re: Забравена команда
Публикувано от: VladSun в Mar 19, 2009, 11:00
Прав си :)


Титла: Re: Забравена команда
Публикувано от: mikis в Mar 19, 2009, 21:41
Това наистина е полезно, нека някой да смени заглавието на темата.


Титла: Re: Периодично изпълняване на команда с кратки интервали
Публикувано от: oracle77 в Mar 24, 2009, 17:45
Здравейте!
Пръво бих искал да се извиня за това, че пиша пост и в тази тема, но надявам се да ме разберете. ( просто темите са много сходни ).
Бих искал да помоля ако може някой да ми помогне.
Става въпрос за следното:
Въобще не съм запознат със ОС Линукс и командите и, а понеже сървъра, на който съм качил файловете ( РНР и 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 сек. - стартира на всяка кръгла минута ) изпълнява командата и спира ( въпреки, че ако се стартира от браузъра ми изпълнява тази команда безкрайно ). Бяха направени промени в скрипта на въпросния файл, но без резултат - най-добрия, постигнат беше да стартира по горепосочения начин.
Някой може ли да помогне и каже как би могло да стане така, че или файла да остане включен на сървъра, или да изпълнява заявка в безкрайност ( т.е. - пак да си остане стартиран, но ... )
Благодаря Ви предварително!
Успех!


Титла: Re: Периодично изпълняване на команда с кратки интервали
Публикувано от: neter в Mar 24, 2009, 18:33
Удобно е да използваш цикъла, който показа 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, което би довело до едновременна работа известно време на два процеса с цикъла. Ти решаваш ;)