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

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

Что тоже не помогает избежать проблемы
  • Вопрос задан
  • 39 просмотров
Решения вопроса 1
nokimaro
@nokimaro Куратор тега PHP
Вам нужно предотвратить возможность запуска нескольких копий скрипта параллельно.
То есть если уже один процесс запущен, и делает работу, то повторные попытки запуска не должны происходить.
Для этого в программировании используется механизм блокировок (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
web developer
За интервал между запусками скрипт не успевает разослать всем пользователям.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
Spice IT Recruitment Москва
До 230 000 ₽
ImageSpark Санкт-Петербург
от 60 000 ₽
FrozenEon Киев
от 1 500 до 3 000 $