LINUX.ORG.RU
ФорумAdmin

Подает демон !


0

0

Всем привет!

Мне нужно повесить демона на FreeBSD вобщем написал его на php

запускаю

# php index.php&

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

anon_666> Смотри /etc/rc.d

Может быть, /etc/init.d/?

В /etc/init.d/ лежат скрипты запуска/остановки/перезапуска демонов, а также файл /etc/init.d/skeleton, который является шаблоном для написания собственного скрипта для демона. Когда напишешь скрипт по этому шаблону, запускать демона нужно будет командой /etc/init.d/<имя_твоего_демона> start, или service <имя_твоего_демона> start. Для управления демоном так-же используются ключи stop, restart, force-reload и status.

confluent_anonymous
()
Ответ на: комментарий от malik555

а еще подскажите как сделать чтоб он исполнял файлы php вот к примеру прописую ./index.php Command not found.

файл лежит в самом файле прописано #!/usr/bin/php

malik555
() автор топика
Ответ на: комментарий от malik555

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

malik555
() автор топика
Ответ на: комментарий от malik555
$ echo -e '1i\n#!/usr/bin/php\n.\nwq' |ed ./index.php 
$ chmod +x ./index.php 
$ nohup ./index.php &
$ exit 

PROFIT

beastie ★★★★★
()

Демон не может подать, он же непись! Срочно пиши багрепорт!

INFOMAN ★★★★★
()

Ты родной, возьми Робачевского и прочитай что есть демон.
Там коротко и ясно. И вопросов глупых не будет.

Svoloch ★★★
()

>php index.php&

Впиши это самое с полными путями в /etc/rc.local Если этого файла нет, - создай.

BSD
()
Ответ на: комментарий от malik555

Проблему так и не решил , попробую опесать подробнее что имею сейчас Есть демон написанный на php (сидит на порту принимает клиентов) , демон подключается к базе Mysql но подключается не сразу а при первом коннекте клиента проверяется если подключения нет к mysql значит создает подключение . Запускаю демон из консоли ./index.php& Демон запускается и работает как часы – подключается к mysql и.т.д .

Прописую его в автозагрузку /usr/local/rc.d/ создаю файл start в него прописую /usr/local/server/index.php& Рестартую сервер - захожу в консоль проверяю sockstat смотрю демон висит на нужном порту все в порядке , подключаюсь первым клиентом демон принимает клиента проверяет есть ли подключение к mysql соответственно подключения нет так как это первый клиент - пытается установить подключение к mysql и демон сразу валится . И вот собственно вопрос , почему когда запускаю через консоль все работает – а когда запускаю через автозагрузку то не может законектится к mysql - и как можно исправить ситуацию ?

malik555
() автор топика
Ответ на: комментарий от malik555

Проблема в том , что Ваша программа по сути не демон. Демон - это процесс, не ипривязанный к управляющему терминалу, то есть в выводе ps -ef в колонке TTY у демонов вы увидите "?" (подробнее, например, тут - http://www.prolinux.ru/introduction/about-linux-processes/)

Для создания полноценного демона вам необходимо почитать мой предыдущий пост про библиотечный вызов daemon(), который наверняка поможет вам решить вашу проблему.

gserg ★★
()
Ответ на: комментарий от gserg

Другой вариант - самостоятельно описать обработчики таких сигналов, как:
1. SIGHUP
2. SIGTTOU
3. SIGTTIN
Вроде, на первый взгляд этого должно хватить. Ну и перенаправить файловые дескрипторы 0,1 и 2.

gserg ★★
()
Ответ на: комментарий от gserg

Да уже читал - только так и не понял как пременить daemon() в моей ситуации

malik555
() автор топика
Ответ на: комментарий от malik555

и если я не делаю подключения к mysql то все работает как часы - я просто не пойму в чем проблема

malik555
() автор топика
Ответ на: комментарий от malik555

синтаксис usage: daemon [-cf] [-p pidfile] [-u user] command arguments ...

я запускаю процес ./index.php& смотрю его pid через команду ps далее daemon -p 1134 -u root выдает usage: daemon [-cf] [-p pidfile] [-u user] command arguments ...

что я не так делаю ?

malik555
() автор топика
Ответ на: комментарий от malik555

код на C примерно такой:

 
#include <stdio.h> 
#include <stdlib.h> 
#include <string.h>

int main(void) {
 char comline[512];
 daemon();
 sprintf(comline, "%s", "КОМАНДА ЗАПУСКА ВАШЕГО  СКРПИТА НА PHP"); 
 return(system(comline)); 
}

gserg ★★
()

чтобы отвязаться от терминала и не получать сигнал при закрытии, который по умолчанию обрабатывается выходом, нужно стать лидером сессии. сделать это можно с помощью системного вызова setsid(2). как подсказывает php.net сделать это можно с помощью http://ru2.php.net/manual/en/function.posix-setsid.php.

anonymous
()
Ответ на: комментарий от gserg

Спасибо тебе, что несешь возмездие во имя луны! Тоже достали php-программисты (специально спец. приставочку пропустил), которые не в состоянии отличить процесс в бекграунде от демона. Правда после объяснения про терминалы и nohup просветление на них не наступает, видимо горбатых сами знаете что исправит.

BigAlex ★★★
()
Ответ на: комментарий от BigAlex

ты дурик. при закрытии управляющего терминала, ядром автоматически генерируется сигнал(SIGHUP) и отправляется всем процессам этого терминала. поскольку по-умолчанию этот сигнал обрабатывается как закрытие процесса - мы и имеем такую картину. переопределение действия по умолчанию для SIGHUP - это не правильное лечение проблемы. правильное лечение - становиться лидером сессии с помощью setsid(2).

anonymous
()
Ответ на: комментарий от anonymous

дебил, демон не закрывает терминал (никакой, ни tty, ни псевдотерминал), он от него «отсоединяется». Специально в кавычках, потому что тайну демонов я тебе не буду расскрывать :)

дебил^2 если не можешь отличить скрипт с одним родительским процессом и кучей форков от демона.

читай дальше свой php.net

BigAlex ★★★
()
Ответ на: комментарий от BigAlex

Алсо, мне в студию определение «хозяина сессии» и определение самой «сессии» в студию. Закрой уже свой php.net и иди книжек нормальных себе купи

BigAlex ★★★
()
Ответ на: комментарий от Ramen

> троллекостер

Костер?! Шо ж так жестоко-то? 21-й век на дворе, между прочим, прогрессивный, атомный, и нанотехнологичный, а они тут костер, панимаишь...

Cancellor ★★★★☆
()
Ответ на: комментарий от gserg

Вы мне тут насоветовали чуть ли не ОС свою разрабатывать для запуска какого то обычного скип та .

Вот умные люди дали

# cd /usr/ports/sysutils/screen
# make install clean
# screen
# ./index.php&

Отключится от screen  Ctrl-a d
и закрываем консоль

Вот и все дела, 4 команды и все !

А вы мне тут книги читай , скрипты пиши какие то !

malik555
() автор топика
Ответ на: комментарий от malik555

Лол.... Ви таки начертили пентаграмму? А теперь начертите круг, чтобы призванный демон служил вам и не пытался безобразничать.

Gorthauer ★★★★★
()
Ответ на: комментарий от malik555

ну так я и написал «примерно» - я ж не могу аргументы всех функций помнить. Для этого ман есть.

gserg ★★
()
Ответ на: комментарий от malik555

Давайте ка попробуем угадать, что будет при попытке вывода вашим «демоном» в дескрипторы 1 или 2?
Ой, кто-то таки забыл описать обработчики SIGTTOU и SIGTTIN и могу вам сказать за вашего «демона», что он уйдет в состояние suspend и вернуть его из этого состояния можно будет только преоставив терминал для вывода.

gserg ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.