Làm thế nào chính xác để cập nhật tự động hoạt động?


28

Tôi đã nhận được một email sáng nay nói rằng trang Wordpress của tôi đã được tự động cập nhật lên phiên bản mới nhất. Tôi biết về tính năng này nhưng tôi luôn tự hỏi chính xác nó hoạt động như thế nào.

PHP không phải là một quá trình chạy vĩnh viễn: nó chỉ chạy khi được yêu cầu. Theo như tôi có thể nói, Wordpress chỉ có thể tự cập nhật khi ai đó tải một trang web. Nhưng quá trình cập nhật không phải là tức thời, vì vậy chắc chắn người dùng truy cập trang web sẽ tải trang rất chậm.

Có một mẹo khác họ sử dụng để cập nhật tự động? Tôi đã tìm kiếm khắp nơi nhưng không tìm thấy lời giải thích nào.


Nói chính xác, nó sẽ chỉ cập nhật khi một bản cập nhật nhỏ hoặc bảo mật mới được phát hành, ví dụ từ 3.8 đến 3.8.1 nhưng khi 3.9 được phát hành (như một bản cập nhật phiên bản chính) thì bạn sẽ phải thực hiện thủ công.
Borek

Câu trả lời:


15

PHP không phải là một quá trình chạy vĩnh viễn: nó chỉ chạy khi được yêu cầu. Theo như tôi có thể nói, Wordpress chỉ có thể tự cập nhật khi ai đó tải một trang web. Nhưng quá trình cập nhật không phải là tức thời, vì vậy chắc chắn người dùng truy cập trang web sẽ tải trang rất chậm.

Có một mẹo khác họ sử dụng để cập nhật tự động? Tôi đã tìm kiếm khắp nơi nhưng không tìm thấy lời giải thích nào.

Hệ thống bạn đang tìm kiếm ở đây được gọi là "WP Cron". Đây là một hệ thống xử lý nền trong WordPress cho phép các sự kiện xảy ra bên ngoài quá trình xử lý thông thường. Họ vẫn cần một trình kích hoạt để khởi động chúng, nhưng họ không can thiệp vào tải trang vì quá trình nền.

Vì vậy, có, ai đó phải tải trang của bạn. Tắt trong tệp default-tests.php, bạn sẽ tìm thấy dòng mã này:

add_action( 'init', 'wp_cron' );

Vì vậy, trên mỗi lần tải trang, hàm wp_cron sẽ chạy. Hàm này đã kết thúc trong wp-gộp / cron.php và chức năng của nó là kiểm tra các sự kiện đã lên lịch trong cơ sở dữ liệu. Nếu có bất kỳ quá trình nào nó cần để chạy trong nền, thì nó gọi hàm spawn_cron.

Spawn cron có hai phương thức hoạt động có thể, nhưng cách đầu tiên và phổ biến nhất là gọi hàm wp_remote_post để tạo kết nối trở lại chính nó, trên URL của wp-cron.php. Bằng cách thực hiện thêm yêu cầu HTTP này, nó bắt đầu một quy trình PHP khác để thực hiện tất cả các công việc thực tế. Yêu cầu mà nó đưa ra ở đây là không chặn, với thời gian chờ là 0,01 giây. Vì vậy, nó không thực sự nhận được bất kỳ kết quả ở đây. Mục đích của yêu cầu chỉ đơn giản là bắt đầu một quy trình mới trong nền. Sau khi hoàn thành, nó chỉ đơn giản là trả về, vì vậy người dùng đang xem không bao giờ có bất kỳ sự chậm trễ nào.

Quá trình wp-cron.php là những gì thực hiện công việc thực tế, và cập nhật, và mọi thứ khác. Rất nhiều quy trình trong WordPress được xử lý bởi hệ thống cron. Xuất bản bài đăng theo lịch, xử lý ping, kiểm tra cập nhật, bất cứ điều gì cần xảy ra ngoài luồng bình thường đều có thể được lên lịch và sau đó chạy trên cơ sở khi cần thiết.

Nhưng có, một cú đánh bình thường vào trang web thực sự phải xảy ra để khởi động quá trình. Và không, WordPress.org không liên hệ trực tiếp với trang web của bạn để khởi động mọi thứ, trang web của bạn phải nhận một số hình thức lưu lượng truy cập để khởi động nó. Bất kỳ hình thức giao thông sẽ làm.


17

Trên thực tế, bản cập nhật tự động được đẩy từ wp.org. Quá trình cập nhật vẫn chạy trên trang web của bạn, nhưng trong nền thông qua wp-cron.

Khi một bản cập nhật nhỏ mới được phát hành, những kẻ tại WordPress bắt đầu tung ra bản cập nhật. Quá trình cập nhật thực tế được bắt đầu sau khi trang web của bạn được kiểm tra wp.orgcập nhật, một bản cập nhật có sẵn về mặt lý thuyết và trang web của bạn được chọn ngẫu nhiên để được cập nhật.


(Cảm ơn bạn @otto đã chỉ ra từ ngữ sai của tôi :))


Vì mọi trang web đều kiểm tra wp.orgcác phiên bản mới (thường sử dụng hai lần một ngày wp-cron), nên máy chủ rollouts biết có bao nhiêu trang web cần cập nhật.

Sau đó, buổi giới thiệu bắt đầu, bắt đầu chậm - 1 trong số 128 trang web được cập nhật tự động. Điều này đang được theo dõi và nếu kế tiếp cho thấy không có vấn đề gì với việc triển khai, nhiều trang web sẽ nhận được cập nhật tự động (thường thì bước tiếp theo sẽ là 1 trên 64 và tiếp tục tăng theo cách đó) cho đến khi tất cả các cập nhật tự động được gửi.

Điều này cho phép các nhà phát triển để ngăn chặn việc triển khai nếu có vấn đề xảy ra, nhưng bản cập nhật mới nhất từ 3.8để 3.8.1có một tỷ lệ thành công 100%.

Các trang web được lựa chọn bởi 1 out of 128thực sự là ngẫu nhiên. Chà, thật ra thì không, nhưng nếu bạn muốn biết, nó hoạt động như thế này:

Url của trang web cần cập nhật được băm bằng cách sử dụng MD5. Chỉ sử dụng ba ký tự đầu tiên của hàm băm này và chuyển đổi nó thành base10, điều này dẫn đến 4096 khả năng. Bản cập nhật bắt đầu cho các trang web có số được tính từ 0 đến 31 (4096/32 = 128).

Được rồi, tôi đoán nó khá ngẫu nhiên sau tất cả;)

Trong trường hợp của tôi, khi tôi chạy rất nhiều trang web WordPress, các bản cập nhật mất 1 ngày - khá buồn cười khi thấy tất cả các trang được cập nhật.

Chỉ trong trường hợp bạn đã tự hỏi: D

btw, đây là một bài viết trên make.wordpress.org mô tả quá trình, như nó đã xảy ra.


Nếu đó là "bắt đầu bởi một yêu cầu từ wp.org đến trang web của bạn", thì nó an toàn đến mức nào? Không ai có thể gửi yêu cầu đến trang web của bạn?
DisgruntledGoat

Trên thực tế, tôi không biết làm thế nào điều này được xử lý kỹ thuật. Nhưng tôi chắc chắn có các kiểm tra bảo mật, như một nonce và / hoặc nơi yêu cầu đến từ đâu.
fischi

1
@fischi Bạn có nhận được thông tin mà wp.org bắt đầu cập nhật không? Có một sự khác biệt LỚN giữa wp.org khi bắt đầu cập nhật hoặc trang wordpress kiểm tra các bản cập nhật và sau đó tự khởi động bản cập nhật nếu wp.org nói với nó rằng có bản cập nhật.
kraftner

1
Câu trả lời này thực sự không chính xác. Quá trình cập nhật không được WordPress.org khởi xướng đến trang web của bạn. Trang web của bạn thực sự cần phải có một số hình thức lưu lượng để khởi động nó, nhưng WordPress.org không ping trang web của bạn trực tiếp.
Otto

1
Được rồi, nhưng "bắt đầu bởi một yêu cầu từ wp.org đến trang web của bạn" là không chính xác. Trang web của bạn thực hiện yêu cầu cập nhật và phản hồi cho bạn biết có bản cập nhật hay không. Không phải là cách khác, trang web của bạn phải bắt đầu quá trình.
Otto

1

Theo nghĩa rộng, khi người dùng truy cập trang wordpress sẽ kiểm tra thời gian hết hạn và nếu phát hiện hết hạn sử dụng, một yêu cầu khác sẽ được gửi đến máy chủ để "chạy" các hành động liên quan đến sự kiện đã hết hạn. Đây là lý do tại sao người dùng không cảm thấy bất kỳ sự chậm trễ đáng chú ý nào trong tải trang, vì máy chủ đang chạy hành động thực tế (nâng cấp trong trường hợp này) trong một quy trình riêng biệt.

Điều này hoạt động nhưng thời gian không chính xác. Càng nhiều lưu lượng truy cập trang web của bạn sẽ càng chính xác.

Những người muốn có được hiệu suất tốt hơn và thời gian chính xác hơn có thể chặn wordpress "process" cron nội bộ và sử dụng tiến trình cron OS để kích hoạt kiểm tra bộ định thời.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.