Каковы причины что скрипт выполняется повторно из system()?

Скрипт рассылки запускается через system("php /usr/mailing.php"), рассылка происходит по боту телеграм, но если количество пользователей переваливает за 2-3к, то рассылка запускается повторно дважды, если пользователей >5к, то трижды. Каковы могут быть причины этого? Блокировка файла не помогает, из-за непонятных причин по окончанию рассылки приходит ещё один запрос, который запускает её снова.
В начале скрипта вписаны данные строки:
set_time_limit(0);
ignore_user_abort(true);
http_response_code(200);

Что тоже не помогает избежать проблемы
  • Вопрос задан
  • 97 просмотров
Решения вопроса 1
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
Вам нужно предотвратить возможность запуска нескольких копий скрипта параллельно.
То есть если уже один процесс запущен, и делает работу, то повторные попытки запуска не должны происходить.
Для этого в программировании используется механизм блокировок (lock) - https://ru.wikipedia.org/wiki/Блокировка_(программ...

В простейшем случае это делается так
0. при запуске скрипт проверяем не существует ли специальный .lock-файл, если существует скрипт прекращает работу.
1. если файла не существует, то создаётся специальный .lock-файл который существует до тех пор пока скрипт работает
2. после завершения работы скрипта файл удаляется
3. при повторных попытках запуска сперва проверяется, нет ли lock-файла. Если есть - считаем что скрипт уже запущен.

Можно написать свою реализацию или использовать готовый компонент, например из Symfony - https://symfony.com/doc/current/components/lock.html

Вариантов реализации может быть множество, через создание файл, через блокировку файла, через симлинк, через семафоры, через stream + socket, но в целом принцип один и тот же.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
@KingstonKMS
За интервал между запусками скрипт не успевает разослать всем пользователям.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽