Бесплатный крон на php

Написал «на коленке» скрипт, но так его и не применил (вернулся к полноценному платному cron). Надеюсь кому-то пригодится…
Крон он полноценно не заменит, но для чего-то точно подойдет. Скрипт поддерживает свою работу до перезагрузки сервера, при этом с заданным интервалом вызывает нужный на url (для того чтобы тем скриптом периодически выполнять работу, которая сильно нагружает сервер, например, обновлять прайс при помощи парсера, или для того чтобы выполнять легкую работу в течении длительного времени — например перебор хэшей паролей).
Происходит обход ограничения времени выполнения скрипта (30 секунд), которое есть на всех хостингах при тарифном плане меньше выделенного сервера.
Для защиты от несанкционированного запуска (скрипт можно остановить только перезагрузкой сервера) используется пароль, передаваемый методом GET: httр://sitе.cоm/myСrоn.php?pass=Privet111 . Интервал выполнения указывайте в секундах.

<?php
/**
 * Скрипт для запуска по расписанию скрипта
 */
 
$url = 'http://subaru.ccc/test2.php';  //запускаемый URL
$thisUrl = 'http://subaru.ccc/MyCron.php';//URL ЭТОГО скрипта
$timeout = 2*60;                    //интервал выполнения (секунд)
$password = 'pAssw_0_rd';              //пароль для активации
//активировать крон можно через URL:
// $thisUrl?pass=$password
// например http://site.com/myCron.php?pass=Privet111


if(!isset($_GET['pass']))
    die('404');
if($_GET['pass'] != $password)
    die('password is wrong!');
$time = isset($_GET['time'])? $_GET['time'] : $timeout;
sleep(25);
$time -= 25;
if($time <= 0)
{
    curl($url);
    $time = $timeout;
}
curl("$thisUrl?pass=$password&time=$time");

function curl($url,$post='',$basicAuth=':')
{
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_HEADER,FALSE);
    curl_setopt($ch, CURLOPT_REFERER, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch, CURLOPT_USERAGENT,'Mozilla/5.0 (Windows; U; Windows NT 5.1; ru; rv:1.9.1.3) Gecko/20090824 Firefox/3.5.4');
    curl_setopt($ch, CURLOPT_ENCODING, 'utf-8');
    curl_setopt($ch, CURLOPT_AUTOREFERER,1);
    curl_setopt($ch, CURLOPT_TIMEOUT,20);

    if($post)
    {
        curl_setopt($ch, CURLOPT_POST, 1);
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post);
    }
    if(defined('COOKIES'))
    {
        curl_setopt($ch, CURLOPT_COOKIEFILE, COOKIES);
        curl_setopt($ch, CURLOPT_COOKIEJAR, COOKIES);
    }
    curl_setopt($ch, CURLOPT_HTTPAUTH, CURLAUTH_ANY);
    curl_setopt($ch, CURLOPT_USERPWD, $basicAuth);

    @curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);

    curl_setopt($ch, CURLOPT_SSL_VERIFYHOST,0);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER,0);


    $data = curl_exec($ch);
    curl_close($ch);
    return $data;
}

если curl($url); будет выполняться пять или более секунд, то скрипт действительно умрёт по таймлимиту. А вообще $time лучше брать по модулую { abs(isset($_GET[‘time’]) ? $_GET[‘time’] : $timeout); } , и при засыпании брать минимальное значение для сна: { sleep($x=min(25,$time)); $time-=$x; }