@Sorax15

Выполнение скрипта раз в 5 секунд?

Добрый вечер,подскажите пожалуйста, как написать функцию, или кусок кода, который бы выполнялся каждые 5 секунд, без крон задачи в бд
  • Вопрос задан
  • 561 просмотр
Пригласить эксперта
Ответы на вопрос 4
OKyJIucT
@OKyJIucT
Sunshine reggae
Создайте такой код и через консоль запустите.
while(true) {

// какой то код

sleep(5);
}


Но тут есть два известных мне нюанса - как только вы закроете консоль, скрипт прекратит работу (решается использованием так называемого скрина screen). И второй - на сервере может быть временной лимит на выполнение скриптов. На шаред хостингах он обычно не превышает 120 секунд.

И еще один момент - если скрипт не оптимизирован, он будет поджирать память, пока она не кончится и ОС его не грохнет.

Либо как вариант можете использовать PM2 для NodeJS - там можно в фоне держать процессы, не нужен крон и бд, но нужен NodeJS.
Ответ написан
Kolyagrozamorey
@Kolyagrozamorey
инженер-электроник службы ИТ ХАЕС
Использовать Cron
Ответ написан
solotony
@solotony
покоряю пик Балмера
использовать процессы/потоки. родитель раз в 5 секунд плодит по новому процессу. детские процессы. отрабатывают твои задачи.
Ответ написан
Комментировать
AK-VoronM
@AK-VoronM
"Мало-мало программист"
//Проверяем есть ли запущенные процессы скрипта контроллера
if (getCurrentProcTasks(basename(__FILE__)) > 2) {
    exit("Уже есть запущенные копии контроллера\n");
}

while (true) {
    // do somethings
    // тут легко можно запускать отдельные скрипты, которые выполняются дольше 5 секунд через exec
    sleep(5);
} 

function getCurrentProcTasks($php_file)
{
    $proc = [];
    $cmd = 'ps aux | grep "' . $php_file . '"';
    exec($cmd, $proc);
    $count = count($proc);
    return $count - 2;// 2 - это системные строки, возникающие в результате работы команды grep.
}


Вот такой скрипт можно запускать из крона раз в 1-5 минут, для контроля выполнения.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы