Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > PHP: Общие вопросы > Запуск циклического скрипта


Автор: starmaster 24.4.2009, 18:42
День добрый!

Есть ли в PHP возможность запускать другое приложение (скрипт с вечным циклом на Perl) и не зацикливаться при этом самому? Просто есть у меня служебная программка на Perl, а админка на PHP, хочется запускать и останаливать её через веб-интерфейс.

Автор: NLspieler 25.4.2009, 01:27
Попробуй передавать php скриптом запросы типа

Код


//bay=ein - включить
//bay=aus - выключить

$url = 'skript?bay=ein' ; 
file_get_contents('$url') ;



Perl же умеет читать гет-переменные?




Автор: starmaster 25.4.2009, 23:52
Неа, не то smile) При Вашем примере, Ваш скрипт зациклится...

Служебный скрипт имеет бесконечный цикл, т.е. имеет постоянно запущенный процесс. Хотел реализовать убийство процесса, через отсылку ему сигнала SIGKILL. Perl скрипт у меня при это ловит этот сигнал, выполняет то, что нужно и заканчивается exit'ом. Но проблема в том, что сигнал из админки отсылается от другого пользователя (www-data), который отличается от того, который запустил скрипт. Соответственно, у первого нету прав для передачи второму сигнала. Получается что и Perl-скрипт тоже надо из админки запускать. Только вот все стандартные функции естественно зацикливаются: exec, system :-(

Автор: NLspieler 26.4.2009, 13:35
Попробуй тогда так, создай файл.
В нем будет хранится единственная строка ein.
Перл-скрипт каждый n-минут проверяет его содержимое и если там записано ein, то продолжает работу, иначе останавливается.

ПХП-админка в этом случаи просто должна менять содержимое этого файла. 

Автор: starmaster 27.4.2009, 22:41
Я думал об этой идее вообще smile Но только при убийстве бота, типа PHP-скрипт из админки создаёт пустой файл bot.kill А Perl скрипт проверяет, существует ли данный файл, если существует, то удаляет его и завершается. Ок, если убиваешь бота. А запускать такой скрипт с циклом не получится думаю :-(

Но у меня есть мысль. Я как-то видел Perl-скрипт, который запускается, потом форкается, его процесс-потомок выполняет свою задачу, а предок просто завершается. Тем самым PHP-скрипт из админки не зациклится, а нормально запустить бота. Я вот только не помню, по теории помоему если главный процесс заканчивается, то порождённый им процесс тоже заканчивает, независимо от того, закончил ли он свою работу или нет. Так ли это? В PHP скрипт будет одинаков для fork'a, как и в Perl, поэтому я просто по теории спрашиваю...

Автор: IZ@TOP 28.4.2009, 13:51
Цитата(starmaster @  26.4.2009,  00:52 Найти цитируемый пост)
Но проблема в том, что сигнал из админки отсылается от другого пользователя (www-data), который отличается от того, который запустил скрипт. Соответственно, у первого нету прав для передачи второму сигнала. 

А в чем проблема? Используйте sudo.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)