การอัปเดตอัตโนมัติทำงานอย่างไร


28

เมื่อเช้านี้ฉันได้รับอีเมลแจ้งว่าเว็บไซต์ Wordpress ของฉันได้รับการอัพเดตโดยอัตโนมัติเป็นเวอร์ชั่นล่าสุด ฉันรู้เกี่ยวกับคุณลักษณะนี้ แต่ฉันสงสัยอยู่เสมอว่ามันทำงานอย่างไร

PHP ไม่ได้เป็นกระบวนการที่ทำงานอย่างถาวร: มันจะทำงานเฉพาะเมื่อมีการร้องขอ ดังนั้นเท่าที่ฉันสามารถบอกได้ Wordpress สามารถอัปเดตตัวเองได้เฉพาะเมื่อมีคนโหลดหน้าเว็บ แต่กระบวนการอัปเดตนั้นไม่ได้เกิดขึ้นทันทีดังนั้นผู้ใช้ที่เข้าชมเว็บไซต์จะต้องโหลดหน้าเว็บช้ามาก

มีเคล็ดลับต่าง ๆ ที่ใช้ในการอัปเดตอัตโนมัติหรือไม่ ฉันค้นหาทั่วสถานที่แล้ว แต่ไม่พบคำอธิบายใด ๆ


เพียงเพื่อความแม่นยำมันจะอัปเดตเฉพาะเมื่อมีการอัพเดทย่อยหรือการปรับปรุงความปลอดภัยใหม่เช่นจาก 3.8 เป็น 3.8.1 แต่เมื่อมีการเปิดตัว 3.9 (เป็นการอัปเดตเวอร์ชันหลัก) คุณจะต้องดำเนินการด้วยตนเอง
Borek

คำตอบ:


15

PHP ไม่ได้เป็นกระบวนการที่ทำงานอย่างถาวร: มันจะทำงานเฉพาะเมื่อมีการร้องขอ ดังนั้นเท่าที่ฉันสามารถบอกได้ Wordpress สามารถอัปเดตตัวเองได้เฉพาะเมื่อมีคนโหลดหน้าเว็บ แต่กระบวนการอัปเดตนั้นไม่ได้เกิดขึ้นทันทีดังนั้นผู้ใช้ที่เข้าชมเว็บไซต์จะต้องโหลดหน้าเว็บช้ามาก

มีเคล็ดลับต่าง ๆ ที่ใช้ในการอัปเดตอัตโนมัติหรือไม่ ฉันค้นหาทั่วสถานที่แล้ว แต่ไม่พบคำอธิบายใด ๆ

ระบบที่คุณกำลังค้นหาที่นี่เรียกว่า "WP Cron" เป็นระบบกระบวนการพื้นหลังใน WordPress ที่อนุญาตให้เหตุการณ์เกิดขึ้นนอกการประมวลผลปกติ พวกเขายังคงต้องการทริกเกอร์เพื่อเปิดใช้งาน แต่พวกเขาไม่ได้ยุ่งเกี่ยวกับการโหลดหน้าเว็บเนื่องจากกระบวนการพื้นหลัง

ใช่แล้วบางคนต้องโหลดหน้าเว็บของคุณ ปิดในไฟล์ default-filters.php คุณจะพบบรรทัดของรหัสนี้:

add_action( 'init', 'wp_cron' );

ดังนั้นในการโหลดทุกหน้าฟังก์ชั่น wp_cron จะทำงาน ฟังก์ชั่นนี้มีมากกว่าใน wp-include / cron.php และสิ่งที่ทำคือการตรวจสอบเหตุการณ์ที่กำหนดในฐานข้อมูล หากมีกระบวนการใด ๆ ที่จำเป็นต้องทำงานในพื้นหลังก็จะเรียกใช้ฟังก์ชัน spawn_cron

วางไข่ cron มีสองวิธีที่เป็นไปได้ของการดำเนินงาน แต่วิธีแรกและที่พบมากที่สุดคือการเรียกฟังก์ชั่น wp_remote_post เพื่อให้การเชื่อมต่อกลับไปเองบน URL ของ wp-cron.php ด้วยการทำคำร้องขอ HTTP พิเศษนี้จะเป็นการเริ่มกระบวนการ PHP อื่นเพื่อทำงานจริงทั้งหมด คำขอที่นี่ทำให้ไม่มีการปิดกั้นด้วยการหมดเวลา 0.01 วินาที ดังนั้นจึงไม่ได้ผลลัพธ์ที่นี่จริง ๆ วัตถุประสงค์ของคำขอคือเพื่อเริ่มกระบวนการใหม่ในพื้นหลัง หลังจากทำสิ่งนี้เสร็จแล้วก็จะส่งคืนดังนั้นผู้ใช้ที่รับชมจะไม่มีความล่าช้าใด ๆ

กระบวนการ wp-cron.php คือสิ่งที่ใช้งานได้จริงและการอัปเดตและทุกอย่างอื่น กระบวนการจำนวนมากใน WordPress ได้รับการจัดการโดยระบบ cron การโพสต์ตามกำหนดการ, การประมวลผลปิง, การตรวจสอบการอัปเดต, สิ่งใดก็ตามที่จำเป็นต้องเกิดขึ้นนอกโฟลว์ปกติสามารถกำหนดตารางเวลาแล้วเรียกใช้ตามความจำเป็น

แต่ใช่การเข้าชมไซต์ปกติจะต้องเกิดขึ้นเพื่อเริ่มกระบวนการ และไม่ WordPress.org ไม่ติดต่อเว็บไซต์ของคุณโดยตรงเพื่อกำจัดสิ่งต่าง ๆ เว็บไซต์ของคุณต้องได้รับการรับส่งข้อมูลบางรูปแบบเพื่อเริ่มต้น การรับส่งข้อมูลทุกรูปแบบจะดำเนินการ


17

wp.orgที่จริงแล้วการปรับปรุงอัตโนมัติถูกผลักจาก ขั้นตอนการปรับปรุงยังคงวิ่งอยู่บนเว็บไซต์ของคุณ wp-cronแต่ในพื้นหลังผ่าน

เมื่อมีการปล่อยการอัปเดตใหม่ ๆ ผู้ใช้ WordPress จะเริ่มต้นการอัพเดท กระบวนการอัปเดตที่แท้จริงจะเริ่มขึ้นหลังจากที่ไซต์ของคุณตรวจสอบwp.orgการอัปเดตการอัปเดตนั้นมีในทางทฤษฎีและไซต์ของคุณจะถูกสุ่มเลือกให้อัปเดต


(ขอบคุณ @otto สำหรับการชี้ถ้อยคำผิดของฉัน :))


เมื่อทุกไซต์ตรวจสอบwp.orgหาเวอร์ชันใหม่ (โดยปกติแล้วจะใช้สองครั้งต่อวันwp-cron) rolloutserver จะทราบว่าต้องมีการอัปเดตไซต์กี่ไซต์

จากนั้นการเริ่มต้นจะเริ่มต้นช้า - 1 ใน 128 ไซต์จะได้รับการอัปเดตอัตโนมัติ สิ่งนี้กำลังถูกตรวจสอบและหากความสำเร็จบ่งชี้ว่าไม่มีปัญหากับการเปิดตัวเว็บไซต์จำนวนมากจะได้รับการอัปเดตอัตโนมัติ (โดยปกติแล้วขั้นตอนต่อไปคือ 1 จาก 64 และเพิ่มต่อไปเรื่อย ๆ ) จนกว่าจะมีการอัปเดตอัตโนมัติทั้งหมด

สิ่งนี้ช่วยให้นักพัฒนาซอฟต์แวร์สามารถหยุดการเปิดตัวหากมีปัญหาใด ๆ เกิดขึ้น แต่การอัปเดตล่าสุดจาก3.8ถึง3.8.1มีอัตราความสำเร็จ 100%

เว็บไซต์ที่เลือกโดยการ1 out of 128สุ่มจริง ไม่ใช่อย่างนั้นจริง ๆ แต่ถ้าคุณอยากรู้มันใช้งานได้เช่นนี้:

URL MD5ของเว็บไซต์ที่จำเป็นต้องได้รับการปรับปรุงโดยใช้แฮช ด้วยการใช้เพียงสามตัวอักษรแรกของแฮชนี้แล้วแปลงbase10เป็น การอัพเดตเริ่มต้นสำหรับไซต์ที่มีตัวเลขที่คำนวณได้ระหว่าง 0 ถึง 31 (4096/32 = 128)

ตกลงฉันเดาว่ามันค่อนข้างสุ่มหลังจากทั้งหมด;)

ในกรณีของฉันเมื่อฉันใช้งานเว็บไซต์ WordPress จำนวนมากการอัปเดตใช้เวลา 1 วัน - เป็นเรื่องตลกมากที่จะเห็นว่าเมื่อทุกหน้าอัปเดต

ในกรณีที่คุณสงสัย: D

ครับ, นี่เป็นบทความเกี่ยวกับ make.wordpress.org อธิบายกระบวนการที่มันเกิดขึ้น


หากเป็น "เริ่มโดยคำขอจาก wp.org ไปยังไซต์ของคุณ" ความปลอดภัยนั้นมีความปลอดภัยอย่างไร ไม่มีใครส่งคำขอไปยังเว็บไซต์ของคุณหรือ
DisgruntledGoat

จริงๆแล้วฉันไม่ทราบวิธีการจัดการทางเทคนิคนี้ แต่ฉันแน่ใจว่ามีการตรวจสอบความปลอดภัยเช่น nonce และ / หรือที่มาจากคำขอ
fischi

1
@fischi คุณได้รับข้อมูลที่ wp.org เริ่มต้นการอัปเดตหรือไม่ มีความแตกต่างอย่างใหญ่หลวงระหว่าง wp.org ที่เริ่มต้นการอัปเดตหรือไซต์ WordPress ทำการตรวจสอบการอัปเดตแล้วเริ่มการอัปเดตเองหาก wp.org แจ้งว่ามีการอัปเดต
Kraftner

1
คำตอบนี้ไม่ถูกต้องจริง กระบวนการอัปเดตไม่ได้เริ่มต้นโดย WordPress.org ในเว็บไซต์ของคุณ เว็บไซต์ของคุณจำเป็นต้องมีการรับส่งข้อมูลในบางรูปแบบ แต่ WordPress.org ไม่ ping ไซต์ของคุณโดยตรง
อ็อตโต

1
ตกลง แต่ "เริ่มโดยคำขอจาก wp.org ไปยังไซต์ของคุณ" ไม่ถูกต้อง เว็บไซต์ของคุณสร้างคำขออัปเดตและการตอบสนองจะบอกคุณว่ามีการอัปเดตหรือไม่ ไม่ใช่วิธีอื่นเว็บไซต์ของคุณต้องเริ่มต้นกระบวนการ
อ็อตโต

1

ในแง่กว้างมากเมื่อผู้ใช้เยี่ยมชมเว็บไซต์ WordPress ตรวจสอบการหมดอายุตัวจับเวลาและหากตรวจพบการหมดอายุการร้องขออื่นจะถูกส่งไปยังเซิร์ฟเวอร์เพื่อ "เรียกใช้" การกระทำที่เกี่ยวข้องกับเหตุการณ์ที่หมดอายุ นี่คือเหตุผลที่ผู้ใช้ไม่รู้สึกว่าการโหลดหน้ากระดาษล่าช้าเนื่องจากเซิร์ฟเวอร์กำลังเรียกใช้การทำงานจริง (อัปเกรดในกรณีนี้) ในกระบวนการแยกต่างหาก

ใช้งานได้ แต่เวลาไม่แม่นยำมาก ยิ่งการเข้าชมไซต์ของคุณมีความแม่นยำมากขึ้นเท่าใด

คนที่ต้องการประสิทธิภาพที่ดีขึ้นและเวลาที่แม่นยำยิ่งขึ้นสามารถบล็อก "WordPress" กระบวนการ "ภายใน cron ได้และใช้กระบวนการ OS cron เพื่อกระตุ้นการตรวจสอบตัวนับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.