- Tại sao sự cố này trong Cron có thể được gây ra?
Đây không phải là một vấn đề cron.
Cron là một bộ lập lịch rất đơn giản, chỉ cần bắt đầu một đợt mới vào thời điểm/khoảng thời gian bạn chỉ định.
Khi, vì bất kỳ lý do gì, công việc hàng loạt của bạn không thể hoàn thành kịp thời trước khi lần lặp tiếp theo bắt đầu, bạn sẽ kết thúc với hai quy trình đồng thời. Cron không làm gì để ngăn chặn điều đó.
Nó thực sự phụ thuộc vào các giả định và mã của bạn nếu điều đó ngay lập tức gây ra sự cố hay không.
Có thể ngay lập tức lần lặp thứ hai tạo ra một số dạng bế tắc và dừng vô thời hạn, 10 giây sau, lần lặp thứ ba dừng lại do bế tắc do lần lặp thứ hai gây ra và 10 giây sau, lần lặp tiếp theo cũng dừng ngay lập tức. Vân vân và vân vân Điều đó có thể nhanh chóng lăn cầu tuyết.
Hoặc nó có thể là một quá trình chậm hơn nhiều, trong đó đối với từng lô riêng lẻ, thời gian chạy tăng dần và thay vì bị đình trệ, ngày càng nhiều lô chạy dài hơn kết thúc bằng việc chạy đồng thời.Điều đó (cuối cùng) làm tăng tải nhiều hơn, bắt đầu tranh chấp tài nguyên và dẫn đến các công việc theo lô thậm chí còn mất nhiều thời gian hơn để hoàn thành và nhiều đợt đồng thời/đồng thời hơn và thiếu tài nguyên.
- Khi tôi tạo một hệ thống xếp hàng cho ví dụ như codigniter thay vì quy trình Cron, nó khác với cron như thế nào?
Như bạn đã trải nghiệm ở đây, cron không phải là một hệ thống xếp hàng. Nó chỉ là một lịch trình rất đơn giản.
Nếu bạn muốn thêm điều khiển công việc phức tạp hơn, bạn cần tạo điều khiển đó. Xem ví dụ câu trả lời này đây về cách đơn giản ngăn nhiều đợt cron chạy đồng thời trong đặc tả lô của bạn.
Mặt khác, thực sự chạy một thứ gì đó cao cấp hơn cron đơn giản có thể là một giải pháp.
- Liệu tôi có thoát khỏi những vấn đề như vậy khi tôi biến PHP thành một hệ thống chạy ngầm không?
Nếu nguyên nhân cốt lõi là do mã của bạn bị hỏng bất cứ khi nào hai lô chạy đồng thời thì các biện pháp được thiết kế để làm cho mã của bạn chạy nhanh hơn sẽ không loại bỏ được lỗ hổng đó cũng như không ngăn được lỗi đó xảy ra lần nữa.