- Чем может быть вызван этот сбой в Cron?
Это не проблема cron.
Cron — это очень простой планировщик, который просто запускает новый пакет в указанное вами время/интервал.
Когда по какой-либо причине ваше пакетное задание не может быть завершено вовремя до начала следующей итерации, вы заканчиваете двумя параллельными процессами. Cron ничего не делает, чтобы предотвратить это.
Это действительно зависит от ваших предположений и кода, если это немедленно вызовет проблему или нет.
Может случиться так, что сразу же вторая итерация создает некоторую форму тупика и останавливается на неопределенный срок, через 10 секунд третья итерация останавливается из-за тупика, вызванного второй итерацией, и через 10 секунд следующие итерации также немедленно останавливаются. И т.д. И т.п. Это может быстро превратиться в снежный ком.
Или это может быть гораздо более медленный процесс, когда для каждого отдельного пакета время выполнения медленно увеличивается, и вместо того, чтобы останавливать все более и более продолжительные пакеты, они в конечном итоге выполняются одновременно.Это (в конечном счете) увеличивает нагрузку еще больше, запускает конкуренцию за ресурсы и приводит к пакетным заданиям, выполнение которых занимает еще больше времени, а также к большему количеству одновременных/параллельных пакетов и нехватке ресурсов.
- Когда я создаю систему очередей, например, для codigniter вместо процесса Cron, чем она отличается от cron?
Как вы поняли, cron не является системой очередей. Это всего лишь очень простой планировщик.
Если вы хотите добавить более сложное управление заданиями, вам нужно это создать. См., например, этот ответ здесь о том, как просто предотвратить одновременный запуск нескольких пакетов cron в вашей спецификации пакета.
В противном случае решением может стать запуск чего-то более продвинутого, чем простой cron.
- Буду ли я свободен от таких проблем, если сделаю PHP системой, работающей в фоновом режиме?
Если основной причиной является тот факт, что ваш код ломается всякий раз, когда два пакета выполняются одновременно, то меры, разработанные для ускорения работы вашего кода, не устранят этот недостаток и не предотвратят его повторение.