Произвольное время запуска crontab

Тема в разделе "PHP", создана пользователем Snout, 13 мар 2008.

Статус темы:
Закрыта.
Модераторы: latteo
  1. Snout

    Snout Постоялец

    Регистр.:
    22 фев 2008
    Сообщения:
    86
    Симпатии:
    15
    Есть сервер и на нем в кронтабе запуск скрипта раз в день в 21:00:

    00 21 * * * /usr/local/bin/php /home/user/domain.com/script.php >/dev/null 2>&1

    Мне надо запуск раз в день, в произвольное время дня, то есть не "21" а от 0 до 23 и вместо "00" надо от 00 и до 59. Как такое реализовать под кронтаб?
     
  2. masto

    masto Прохожие

    Кроном никак.
    Разве что по крону периодически запускать скрипт который и будет рулить дальше.
     
    Последнее редактирование модератором: 7 окт 2015
  3. masto

    masto Прохожие

    ну а надпись Мне надо запуск раз в день, в произвольное время дня к чему?
     
  4. mozgon

    mozgon Постоялец

    Регистр.:
    12 фев 2008
    Сообщения:
    141
    Симпатии:
    31
    есть такой выход, может кривой, но сам пользую и работает впоряде:
    ставишь set_time_limit(0);
    запускаешь срипт по крону, в любое удобное для тебя время,
    там:

    sleep(RAND(0, 86400)); // ремдомная задержка 0-24 часа
    /*
    тут дальше выполняешь что надо
    */
     
  5. masto

    masto Прохожие

    У любого нормального хостера, такой скрипт автоматом прибьётся после получаса-часа работы.
    не айс.

    проще периодически по крону запускать скрипт, который при запуске в начале суток будет куда-то писать рандомную метку по времени и затем при каждом запуске чекать её и если она просрочена, то выполнять необходимые действия.
     
    Последнее редактирование модератором: 7 окт 2015
  6. Snout

    Snout Постоялец

    Регистр.:
    22 фев 2008
    Сообщения:
    86
    Симпатии:
    15
    mozgon: такой вариант не подходит.

    Может можно создать скрипт который сам меняет часть того что занесено в крон? Скажем, скрипт лезет в кронтаб, стирает 3 последних записи (а 3я нижними записями будут как раз те что и надо запускать в рандом время) и вместо них записивает 3 новых, но с рандом временами запуска раз в день. Этот скрипт тоже забросить в крон, так чтобы раз в день он перезаписывал 3 последих записи, скажем ночью в 00:00. Не знаю реально ли это.

    Тоже сойдет. Если можно, пример какой нидбудь, попробовать в действии на сервере.
     
    Последнее редактирование модератором: 7 окт 2015
  7. masto

    masto Прохожие

    1.
    создаёшь 2-а файла:

    cron.php
    PHP:
    <?php

    include('cron_data.php');

    if( (
    $date == date('jm')) && $done  )
        exit(
    'сегодня уже выполнено');

    $ch date('G');
    $cm = (int)date('i');

    if( (
    $ch >= $mh) && ($cm >= $mm) )
    {
        
    $data "<?php\n";
        
    $data .= '$date = ' date('jm') . ";\n";
        
    $data .= '$done = true;' "\n";
        
    $data .= '$mh = ' rand(023) . ";\n";
        
    $data .= '$mm = ' rand(059) . ";\n";
        
    $data .= '?>';
        
        
    $file fopen("cron_data.php""w");
        
    fwrite($file$data);
        
    fclose($file);
        
        
    // делаем что нам надо
    }

    ?>
    и cron_data.php
    PHP:
    <?php
    $date 
    '';
    $done false;
    $mh 0;
    $mm 0;
    ?>
    2.
    настраиваешь CRON на запуск cron.php скажем каждые 5 минут:
    Код:
    */5 * * * * команда запуска
    3.
    наслаждаешься.
     
    Последнее редактирование модератором: 7 окт 2015
    silmarion и Xrumer нравится это.
Статус темы:
Закрыта.