Каковы причины что скрипт выполняется повторно из 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
За интервал между запусками скрипт не успевает разослать всем пользователям.
Ответ написан
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы