Вам нужно предотвратить возможность запуска нескольких копий скрипта параллельно.
То есть если уже один процесс запущен, и делает работу, то повторные попытки запуска не должны происходить.
Для этого в программировании используется механизм блокировок (lock) -
https://ru.wikipedia.org/wiki/Блокировка_(программ...
В простейшем случае это делается так
0. при запуске скрипт проверяем не существует ли специальный .lock-файл, если существует скрипт прекращает работу.
1. если файла не существует, то создаётся специальный .lock-файл который существует до тех пор пока скрипт работает
2. после завершения работы скрипта файл удаляется
3. при повторных попытках запуска сперва проверяется, нет ли lock-файла. Если есть - считаем что скрипт уже запущен.
Можно написать свою реализацию или использовать готовый компонент, например из Symfony -
https://symfony.com/doc/current/components/lock.html
Вариантов реализации может быть множество, через создание файл, через блокировку файла, через симлинк, через семафоры, через stream + socket, но в целом принцип один и тот же.