Вы можете просто запретить запуск одновременных скриптов cron с помощью файла блокировки. Вы, вероятно, не хотите, чтобы одновременные скрипты загружали вложения, у вас будут неприятные условия гонки.
Работает так:
starter.sh
- Проверяет, существует ли файл блокировки, и немедленно закрывается.
- Если этого не происходит, он создает файл блокировки и запускает скрипт main.php.
- После завершения main.php он удаляет файл блокировки.
- Таким образом, если main.php вылетает или выдает исключение, файл блокировки удаляется и может быть перезапущен в следующую минуту.
main.php
- выполняет фактическую загрузку.
Редактировать
Понятно. Затем вам нужна более сложная настройка. однопоточный скрипт, который считывает from, subject и datetime и помещает их в очередь (для этого идеально подходит таблица db). Это должно работать, как я объяснил выше. Во-вторых, у вас есть пул php-процессов, которые читают таблицу db и загружают вложения на основе данных в таблице.
Поскольку они работают с поточно-ориентированной структурой данных (базой данных), они могут установить флаг в каждой строке, который говорит о загрузке / загрузке.
Они просто работают в цикле с выбором SQL в верхней части (выберите топ 1 не загруженные / загружаемые сообщения). Вам понадобится что-то для обработки сбоев и перезапуска процессов php, но в этом суть.