Помогите написать демон.

MbIX

Guest
Помогите написать демон.

Постановка задачи:
Есть линукс сервер. ( перевожу вопрос в теоретический ). там три файла: restart.pl, script1.php script2.php .
restart.pl -> висит в кроне и перезапускает script1.php (если тот пропадает в древе процессов >> ps x)
script1.php -> main-part-распределитель, чья задача распределять полученные комманды по модулям (запускать их на сервере и передавать им параметры.
script2.php -> соответственно модуль, который должен быть запущен script1.php'ом.

если запускать script1.php самостоятельно из шелла(а не из крона с restart.pl) и находиться на консоли, то запуск script2.php из script1.php происходит подачей простого запроса:
<?php
system("php script2.php $someparam >/dev/null 2>&1 &");
?>

если же script1.php запускается из крона, или если (после старта его из шелла) закрыть консоль, то команда system так или иначе перестает выполняться.

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

Кром

Новичок
>если же script1.php запускается из крона, или если (после старта его из шелла) закрыть консоль, то команда system так или иначе перестает выполняться.

Что то я эту фразу не очень понял. Почему она перестает выполнятся? С чего ты это взял?
 

MbIX

Guest
а вот незнаю почему. Хотя после некоторых консультаций и анализа стало совершенно очевидным: если закрыт юзер-сейанс с шеллом, то его какбы и нету вовсе. Тобишь отсюда мы имеем: все внутренние system из php скриптов не выполняются. Они выполняются только пока Я нахожусь на консоли.

Сейчас пробую написать тоже но через параметры типа $_GET, а не через ARGV[]; . Порева заметно прибавилось.. хотелось бы всётаки аналгом system.
 

Кром

Новичок
>Хотя после некоторых консультаций и анализа стало совершенно очевидным: если закрыт юзер-сейанс с шеллом, то его какбы и нету вовсе.

Это кто тебя так проконсультировал?

>Сейчас пробую написать тоже но через параметры типа $_GET, а не через ARGV[];

А как ты найдешь в консоли _GET массив?
 

MbIX

Guest
Это мне сказал админ чат.ры, он же Илья, он же scarab. Довольно таки значимая фигуры тех пинатов и хороший php програмер. Слова подтвердил procool - чей опыт неприрекаем. Кароче не суть. $_GET как ты мог догодаться идет не через консоль (она ведь у нас отключена, правда?) отсюда и > Порева заметно прибавилось <

Далее слезно прошу перестать задавать глупые вопросы а помочь в написании демона. Если я гдето неправ - поправь, дай какой нить сорц или подсказку или помоги реальным кодом. Не вижу смысла полемизировать ни о чем. Постановка задачи вполне полна и понятна. Другое дело если опыта в том или ином вопросе нехватает. А у меня его нехватает, в плане создания и обработки сигналов "в" и "из" php скриптов. Поэтому и обратился сюда с сей просьбой. Если помочь некому или не представляется возможным (опыта также мало или хбз) так и скажите - пошукаю дальше. Сюда просто меня направили из програм-центра, коему я отписывал по поводу моей проблеммы.
 

MbIX

Guest
2 ys

>>Я писал
Тоесть фактический вопрос заключается в том, кто бы помог в написании демона. Очень нужно, а в пхп я не асс. Просьба не ссылаться на бесконечные маны и прочее, а непомредственно помочь в написании. Дело в том, что я их уже читал и относительно демона ничерта непонял..
 

Кром

Новичок
MbIX
Я не знаю что ты подразумеваешь под глупыми вопросами. Вопросы, которые я задаю, можно скорее назвать наводящими. Тебе это не нравиться? Так это не наша проблема.
И совершенно очевидно, не имеет смысле помогать тебе в написании демона, ведь мы еще не установили от чего не работает твой.
 

MbIX

Guest
а мой разве демон? мой (как я понимаю) просто скриптик, там ни fork() и ничего подобного.. ни древа ни распределения сигналов нет. Банальное обращение к консоли..
 

Кром

Новичок
Если у тебя банальное обращение к консоли, то разницы никакой, демон обращается к консоли или простой скрипт.
Поэтому нет смысла писать демон, который тоже не будет работать.
У тебя прав то достаточно, чтобы запускать по cron'у системные команды? Я так понимаю, что нет.
 

MbIX

Guest
так в чем прелесть, я же объяснял.. крон запускает script1.php причем исправно...a script1.php запускает (уже сам) script2.php (если script1 запускаю я сам, и нахожусь на консоли). Стоит мне закрыть сеанс - script1.php неможет более запустить script2.php . Та же ситуация складывается изначально, если я не открываю консоль вообще, а запускаю script1.php из крон-джаба.

В обоих случаях парадокс. Сеанс консоли при крон-запуске не открывается, и когда я его закрываю => script1 неможет запустить script2. Вот и точка сборки.. а почему незнаю..
 

Кром

Новичок
...a script1.php запускает (уже сам) script2.php (если script1 запускаю я сам, и нахожусь на консоли).
Вот с этого места ничего не понятно.

Стоит мне закрыть сеанс - script1.php неможет более запустить script2.php .
А как запускается script1.php если ты уже разлогинился?
 

3BEP

Новичок
MbIX
Пиши лог в script1.php. Может у тебя прав не хватает, может нужно полный путь к script2.php указывать в вызове, может ... дальше вольные вариации на тему.
 

MbIX

Guest
2 Кром
1: script1.php запускается мной с консоли командой:
php script1.php >/dev/null/ 2>&1 &, после чего я закрываю консоль.

(или той же командой из крона).

Далее script1.php висит в процессах (set_time_limit(0))
(уточню: речь идет о продвинутом чат-боте)

Ему поступает некая команда, которая должна породить script2.php .
И именно тут script1.php посылает:
system("php script2.php $some param >/dev/null/ 2>&1 &");
Которая, в свою очередь выполняется тогда и только тогда, когда я сам запускаю script1 и далее нахожусь на консоли.

2 3BEP:
Прав хватает, атрибуты выставлены, всё тип-топ, на первый взгляд. ВСё что может случиться - глюк самого сервера, какой-то. логи вести пробовал, тобишь перенаправлять репорт system в некий файл. И что я обнаруживал? Он пустой :) консоль (разумею) отрублена, и перенаправлять нечего.
 

svetasmirnova

маленький монстрик
>Которая, в свою очередь выполняется тогда и только тогда, когда я сам запускаю script1 и далее нахожусь на консоли.
Глупость сейчас скажу, но вдруг. Попробуй
system("su -c your_username php script2.php $some param >/dev/null/ 2>&1 &");
 

Кром

Новичок
>Далее script1.php висит в процессах (set_time_limit(0))

А ты уверен, что когда ты разлогиниваешся script1 продолжает работать? Как ты это узнаешь?
 

3BEP

Новичок
MbIX
вместо /dev/null/ в кроне указываешь файл который будет логом
для проверки ставишь перед вызовом system что-то вроде
echo "before system";
после echo "after system";
если эти две строки будут идти подряд и у тебя не заглушен вывод ошибок - значит вызов system идет нормально. аналогично проделываешь для script2.php, например выводишь метки, которые покажут что скрипт отработал от начала до конца. Соответственно если будет только метка начала работы - значит скрипт валится в процессе. Блин, да как ты отлаживаешь обычные скрипты с выводом в браузер - аналогично отлаживаешь и эти, только вывод делаешь в файл. Потом перенаправишь вывод в /dev/null/ хотя не советую.
 

MbIX

Guest
2 Кром
Работать он продолажет так как это бот и в чате он висит и я его вижу и он со мной разговаривает ))) тут вопросов возникать недолжно. И сам script2 работает. СКРИПТЫ РАБОЧИЕ :)

2 ЗВЕР
Я знаю как логировать) и я логировал уже, говорю же.. нет там нифига,. тишина и пустота..

2 svetasmirnova
Спасибо, чего только не пробовал) но все что идет через консоль глохнет..
 
Сверху