@bromterier
Люблю писать код. Начинающий

Как настроить работу демона на php и выполнения sql запроса в нем?

Всем привет!

Хотел разобраться с написанием демона на php и понял, что это нелегкая тема))

Правильно ли я понимаю, что внутри цикла while в демоне и пишется логика, ради которой демон и запускался?

Если так, то теоретически я могу написать sql запрос, который будет отрабатываться в определенное время? (я знаю про существование cron, просто хочу попрактиковаться

Вот сам код:

<?php
include('db.php');

// Форкаем процесс
$pid = pcntl_fork();
if ($pid == -1) {
    // Ошибка
    die('could not fork'.PHP_EOL);
} else if ($pid) {
    // Родительский процесс, убиваем
    die('die parent process'.PHP_EOL);
} else {
    // Новый процесс, запускаем главный цикл
    while(true) {
            $mysqli->query("INSERT INTO task (
                        date,
                        )
                 VALUES (
                        '".$date->format('H:i:s')."'
                        )
                 ");
            sleep(1);

        }
}
// Отцепляемся от терминала
posix_setsid();
)

Пожалуйста подскажите, правильно ли я использую демона? Используют ли его с такой логикой?

P.S Многие топики прочел, но ответа на свой вопрос не нашел. Или может быть не понял
  • Вопрос задан
  • 467 просмотров
Решения вопроса 1
fornit1917
@fornit1917
PHP уже давно хорошо подходит для написания демонов. Не слушайте "умников", которые говорят что это "бред" и "наркомания".

ЗЫ: вы к базе в родительском процессе подключаетесь, а работать с ней пытаетесь в дочернем после форка. Не надо так.
Ответ написан
Пригласить эксперта
Ответы на вопрос 3
littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.
На мой взгляд это наркомания. Во-первых, память. Во-вторых производительность.
3:
while(true) {
            $mysqli->query("INSERT INTO task (
                        date,
                        )
                 VALUES (
                        '".$date->format('H:i:s')."'
                        )
                 ");
            sleep(1);
        }
}
//Код ниже никогда не будет выполнен
// Отцепляемся от терминала
posix_setsid();


На счет того, что логика пишется внутри while - да. Демон как раз таки и нужен для того, чтобы постоянно выполнять действия заданные в цикле.

Сделайте, например, на bash: 1, 2.
Ответ написан
Комментировать
des1roer
@des1roer
ученье - свет, а неученье - приятный полумрак
бред же. напишите на питоне свой скл и запускайте кроном
Ответ написан
@alex-ray
В своем проекте столкнулся с ситуацией, когда демону приходится долго ждать до выполнения sql-запроса. В этом случае у меня экземпляр класса соединения с БД продолжал существовать, но соединение в нем рвалось.

Решил проблему проверкой соединения непосредственно перед выполнением запроса.

private function checkMysqli()
{
    if (!$this->mysqli->ping()) {
        $this->__construct();
    }
}

$this->mysqli содержит экземпляр класса mysqli, созданный конструктором обертки БД.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы