Рейтинг@Mail.ru

Журнал "Код моё имя" » Статьи блога » Статьи

PHP + Cron

(4 сообщения)
  1. BelA-z
    Участник

    К сожалению, стандартные вредства пхп не позволяют в полном объёме работать с планировщиком задач Cron. Для решения поставленной задачи можно сделать псевдо планировщик.
    Принцип работы которого будет следующим:
    - Мы создадим файл, запускаемый планировщиком раз в 1 минуту, этот файл будет обращаться к базе заданий и выполнять их в зависимости от даты задания.
    Как вы уже догадались этот псевдо крон будет иметь ограничение в 1 минуту по интервалу.
    Создадим базу данных для начала

    необходимо выполнить следующий запрос

    1
    2
    3
    4
    5
    6
     CREATE TABLE `tasks` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY ,
    `command` VARCHAR( 250 ) NOT NULL ,
    `date` VARCHAR( 15 ) NOT NULL ,
    `type` VARCHAR( 15 ) NOT NULL
    ) ENGINE = MYISAM

    Добавим теперь одно тестовое задание. Например запуск скрипта test.php из корневой папки пользователя в 2 часа дня, а так же задание которое выполнится 1 раз 12 сентября, 2001 года в 12 часов дня

    1
    2
    3
    4
    5
    6
    7
    INSERT INTO `tasks`
    VALUES (
    NULL , 'php test.php', '14:00', 'dayly'
    );INSERT INTO `tasks`
    VALUES (
    NULL , 'php test2.php', '12.09.2001 12:00', 'once'
    );

    теперь у нас есть 2 задания… напишем обработчик dayly и once… остальные обработчики вы можете написать сами на базе моих.. они очень простые :)
    Но для начала создадим скрипт cron.php и поставим его выполнять каждую минуту в планировщике

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    // подключаемся к дазе
    mysql_connect('host', 'user', 'pass');
    mysql_select_db('database');

    // сосдавляем запросы для выбора команд
    $tasks=Array();
    $tasks['once']="select command from tasks where type='once' and date='".date(d-m-Y H:i)."'";
    $tasks['day']="select command from tasks where type='dayly' and date='".date(H:i)."'";

    //обрабатываем запросы
    foreach($tasks as $k=>$v)
    {
        $task=mysql_query($v);
        while ($row = mysql_fetch_assoc($task)) {
            if(function_exists('system'))
                system($row["command"], $log); // переменную лог потом можно записать в результаты выполнения команд
            elseif(function_exists('exec'))
                exec(($row["command"],'',$log); // переменную лог потом можно записать в результаты выполнения команд
            else $log='fail! command executing not supported';
             // пишем лог выполнения команд
            $fp=fopen('log.txt','a+');
            fwrite($fp,$log);
            fclose($fp);
        }
    }

    mysql_close();

    Тут я привёл всего лишь концепцию того, как можно реализовать планировщик. Функционал всегда можно добавить, тем более в данном случае необходимо просто добавить новый запрос в массив $tasks :)
    PHP + Cron

    Отправлено 2 года назад #
  2. Павел
    Неактивен

    Опубликовано незарегистрированным пользователем: Павел (E-mail, Адрес)

    Но сам файл cron.php таки нужно всё равно засовывать в crontab…

    Отправлено 2 года назад #
  3. Sergey
    Хранитель

    это да.. там же и написано, что это псевдо крон :)
    а вообще в друпале видил, что там есть какие-то другие апи по работе с кроном, но комать огромную цмску мне конешно же было лень из-за такой мелочи.. в 90% случаев сойдёт и этот вариант.. тем более он очень прост в реализации

    Отправлено 2 года назад #
  4. StarCOM
    Неактивен

    Опубликовано незарегистрированным пользователем: StarCOM (E-mail, Адрес)

    Нет смысла в этом скрипте, это полнейший бред. Вот подумайте если нужно юзать крон чтоб юзануть этот псевдо-крон смысл от его тогда? Да и еще если нужно например файл запускать каждый месяц так его постоянно над добавлять. Можно только сделать переменную которая будет вносить отсчет дней и на 1е число обновляться к нулю. Вот только так выйдет и то при этом все равно ежедневный запуск крона нужен.

    Не изобретайте колесо которое уже открыли до вас. Проще прочитать мануал по крону стандартному и юзать чем этот псевдо-крон.

    Отправлено 2 года назад #

RSS экспорт этой темы

Отправить сообщение

Вы должны войти в систему, чтобы оставлять сообщения.