Размещено: 2023-12-15 20:45:58

Теги: php

CRON ЧАЩЕ ЧЕМ РАЗ В МИНУТУ

Если нужно сделать, что бы php скрипт выполнялся через каждые несколько секунд, то есть простой способ как это осуществить. Вся программа помещается в функцию work(), неизменяемые данные, помещаются в константы. При этом должна быть четко прописаны return false; что бы не возникало непредвиденных ошибок, и происходил переход к следующей итерации, которые привели бы к остановке выполнения программы. Так же естественно не должно быть exit; все exit; необходимо переписать на return false; Затем это вешается на крон и ставится выполнение раз в минуту.

function work()
{
    if(($a=rand(0,1))!=1)
    {
        echo 'false:'.$a.'<br>';
        return false;
        echo 'не выполнять!';
    }
    else
    {
        echo $a.'<br>';
    }
}


//время запуска
$start_time=time();

//запускаем через sleep вплоть до 57 секунды, в итоге время скрипта примерно минута
while(time()-$start_time<57)
{
    work();
    sleep(3);
    clearstatcache(); //иначе часть функций кэшируются. это как минимум. а возможно еще какие-то баги появляются при таком решении
}

А так вообще надо сказать, что этот метод - плохой. Сама архитектура метода неверная. PHP плохо подходит для такого использования, не говоря уже про бесконечные циклы и прочую ерунду, с которой вообще только геморой можно заработать и ничего больше. Много что может работать не так как при одной итерации и однократном выполнении кода. И проверить это заранее и понять практически нереально. Появляются всякие непредсказуемые неожиданности: допустим при работе с txt файлом, если каждую итерацию запрашивать время последнего изменения файла filectime. То результат всегда будет одинаковым, даже если в файле что-то изменить в это время. Потому, что все функции кэшируют результат. Чтобы сбросить кэш используйте функцию clearstatcache().

Место такого способа лучше использовать что-то, что будет вызывать однократное выполнение файла, через определенное время. Сторонние программы. Либо как-то через localhost вызывать выполнение скрипта через каждые n-sec и тогда он абсолютно предсказуемо будет себя вести.


На эту страницу чаще всего попадают по запросам: крон чаще чем раз в минуту, очистить кэш, сбросить время последнего изменения файла