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

Статус
В этой теме нельзя размещать новые ответы.

Snout

Постоялец
Регистрация
22 Фев 2008
Сообщения
83
Реакции
18
Есть сервер и на нем в кронтабе запуск скрипта раз в день в 21:00:

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

Мне надо запуск раз в день, в произвольное время дня, то есть не "21" а от 0 до 23 и вместо "00" надо от 00 и до 59. Как такое реализовать под кронтаб?
 
Кроном никак.
Разве что по крону периодически запускать скрипт который и будет рулить дальше.
 
Последнее редактирование модератором:
Ну вообщето он писал надо 00 и до 59 насколько я понял это минуты
ну а надпись Мне надо запуск раз в день, в произвольное время дня к чему?
 
есть такой выход, может кривой, но сам пользую и работает впоряде:
ставишь set_time_limit(0);
запускаешь срипт по крону, в любое удобное для тебя время,
там:

sleep(RAND(0, 86400)); // ремдомная задержка 0-24 часа
/*
тут дальше выполняешь что надо
*/
 
У любого нормального хостера, такой скрипт автоматом прибьётся после получаса-часа работы.
не айс.

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

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

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

Тоже сойдет. Если можно, пример какой нидбудь, попробовать в действии на сервере.
 
Последнее редактирование модератором:
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(0, 23) . ";\n";
    $data .= '$mm = ' . rand(0, 59) . ";\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.
наслаждаешься.
 
Последнее редактирование модератором:
Статус
В этой теме нельзя размещать новые ответы.
Назад
Сверху