Задать вопрос

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

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

Что тоже не помогает избежать проблемы
  • Вопрос задан
  • 111 просмотров
Подписаться 1 Простой Комментировать
Помогут разобраться в теме Все курсы
  • Skillbox
    Веб-разработчик на PHP
    9 месяцев
    Далее
  • Хекслет
    PHP-разработчик
    10 месяцев
    Далее
  • Нетология
    Веб-разработчик с нуля: профессия с выбором специализации
    14 месяцев
    Далее
Решения вопроса 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
За интервал между запусками скрипт не успевает разослать всем пользователям.
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы
FoodSoul Калининград
от 180 000 до 250 000 ₽
IT-Spirit Москва
от 230 000 до 320 000 ₽
от 200 000 до 290 000 ₽