1 Востаннє редагувалося Betterthanyou (29.11.2020 17:15:10)

Тема: Автоматичне виконання скрипта, але не зовсім cron

Потрібно реалізувати відправку повідомлення (звичайне текстове) зі задержкою на Н секунд, або точно у вказану дату і час.

Наприклад
1) Користувач ввів затримку на 50000 секунд
2) Користувач ввів 11/29/2020 06:55

Звичайно користувач не один і створювати задачу для cron кожного разу це не "те".

Налаштував cron викликати скрипт відправки кожних 5 хв.

Можна зробити так:
1) Дізнатися поточний час
2) Дізнатися чи в періоді від поточного часу до +5 хв є якісь повідомлення, посортувати, поставити їх на паузу "sleep", відправляти по черзі

Можливо в php є якісь більш зручніші механізми для виконання скрипту в заданий час ? Плагіни ?

Що робити якщо max_execution_time менший чим 5 хв, але хостинг не дозволяє частіше викликати скрипт через cron ?

2

Re: Автоматичне виконання скрипта, але не зовсім cron

Напишіть скрипт-планувальник, що виконує завдання з найближчої хвилини, і запускайте його cron-ом щохвилини.

Подякували: bvn1

3

Re: Автоматичне виконання скрипта, але не зовсім cron

Ну якщо слід навіть через кілька секунд, то можна таку милицю, що першою спала на думку
В шапку myscript.php

ignore_user_abort(true);
set_time_limit(0);

$i=0;

while(true){
$i++;
//ваші дії
sleep(1); //нова ітерація через кожну 1 сек
if($i == 60){ //якщо хвилина роботи скрипта
file_get_contents('htttp://mysite.com/myscript.php'); //то звертаємо до поточного скрипта знову
break; //виходимо з циклу
}
}

Хз чи працюватиме, не перевіряв  :D

Подякували: Betterthanyou1

4

Re: Автоматичне виконання скрипта, але не зовсім cron

В самому php можна поміняти max_execution_time.
Через https://www.php.net/manual/en/function. … -limit.php . Хай крутиться постійно в памяті як демон. Кроном запускати скрипт, який перевіряє чи демон крутиться( наприклад дивлячись на список процесів, чи дивлячись в базі коли демон останній раз якусь роботу робив) якщо демон не запущений, то запускає демон.

Подякували: Betterthanyou1

5

Re: Автоматичне виконання скрипта, але не зовсім cron

Vo_Vik написав:

В самому php можна поміняти max_execution_time.
Через https://www.php.net/manual/en/function. … -limit.php . Хай крутиться постійно в памяті як демон.

Якщо це просто процес запущений через cli, то не треба цей параметр змінювати, він і так може жити "вічно". То актуально тільки для fpm/cgi

Для того, щоб крон не контролював чи скрипт запущений, можна використати http://supervisord.org/

Ще як варіант
https://en.wikipedia.org/wiki/At_(command)
(із php викликати shell команду і запланувати виконання чогось)
Але, як на мене, кроном - цілком логічне рішення