自動更新はどのように機能しますか?


28

今朝、Wordpressサイトが自動的に最新バージョンに更新されたことを知らせるメールを受け取りました。私はこの機能については知っていましたが、それがどのように機能するのかを常に疑問に思っていました。

PHPは永続的に実行されるプロセスではありません。要求されたときにのみ実行されます。だから、私が知る限り、Wordpressは誰かがWebページをロードしたときにのみ自分自身を更新できます。しかし、更新プロセスは瞬間的なものではないため、サイトにアクセスするユーザーのページ読み込みは本当に遅くなります。

自動更新に使用する別のトリックはありますか?私はあちこちを検索しましたが、説明は見つかりませんでした。


正確に言うと、新しいマイナーアップデートまたはセキュリティアップデートがリリースされた場合にのみ更新されるため、たとえば3.8から3.8.1に更新されますが、3.9がリリースされた場合(メジャーバージョン更新として)、手動で更新する必要があります。
ボレック14年

回答:


15

PHPは永続的に実行されるプロセスではありません。要求されたときにのみ実行されます。だから、私が知る限り、Wordpressは誰かがWebページをロードしたときにのみ自分自身を更新できます。しかし、更新プロセスは瞬間的なものではないため、サイトにアクセスするユーザーのページ読み込みは本当に遅くなります。

自動更新に使用する別のトリックはありますか?私はあちこちを検索しましたが、説明は見つかりませんでした。

ここで探しているシステムは「WP Cron」と呼ばれます。これは、WordPressのバックグラウンドプロセスシステムであり、通常の処理以外でイベントを発生させることができます。それらを開始するにはトリガーが必要ですが、バックグラウンドプロセスのためにページの読み込みを妨げることはありません。

はい、誰かがあなたのページをロードする必要があります。default-filters.phpファイルでは、次のコード行が見つかります。

add_action( 'init', 'wp_cron' );

そのため、ページがロードされるたびにwp_cron関数が実行されます。この関数はwp-includes / cron.phpで終了し、データベースでスケジュールされたイベントをチェックします。バックグラウンドで実行する必要があるプロセスがある場合、関数spawn_cronを呼び出します。

Spawn cronには2つの可能な操作方法がありますが、最初の最も一般的な方法は、wp_cron.phpのURLでwp_remote_post関数を呼び出して自分自身に接続を戻すことです。この追加のHTTP要求を作成することにより、別のPHPプロセスが開始され、すべての実際の作業が行われます。ここで行われるリクエストは非ブロッキングで、0.01秒のタイムアウトがあります。そのため、実際には結果が得られません。リクエストの目的は、単にバックグラウンドで新しいプロセスを開始することです。これが行われた後、それは単に戻るので、表示ユーザーには遅延がありません。

wp-cron.phpプロセスは、実際の作業、更新、その他すべてを行うものです。WordPressの多くのプロセスは、cronシステムによって処理されます。スケジュールされたポストパブリッシング、pingの処理、更新チェック、通常のフロー以外で発生する必要のあるものはすべてスケジュールし、必要に応じて実行できます。

ただし、プロセスを開始するには、サイトへの通常のヒットが実際に発生する必要があります。いいえ、WordPress.orgはサイトに直接アクセスして物事を開始することはありません。サイトを起動するには何らかの形でトラフィックを受け取る必要があります。どんな形のトラフィックでもかまいません。


17

実際には、自動更新はからプッシュされwp.orgます。更新プロセスはサイトで実行されますが、バックグラウンドでを介して実行されますwp-cron

新しいマイナーアップデートがリリースされると、WordPressのスタッフはアップデートの公開を開始します。実際の更新プロセスは、サイトwp.orgが更新を確認した後に開始され、理論的には更新が利用可能になり、更新するサイトがランダムに選択されます。


(私の間違った言い回しを指摘してくれてありがとう@otto)


すべてのサイトwp.orgが新しいバージョンをチェックするため(通常は1 wp-cron日に2回を使用)、ロールアウトサーバーは更新が必要なサイトの数を把握しています。

その後、ゆっくりと開始され、ロールアウトが開始されます-128サイトのうち1サイトが自動的に更新されます。これは監視されており、成功率がロールアウトに問題がないことを示している場合、すべての自動更新が配信されるまで、より多くのサイトが自動更新を取得します(通常、次のステップは64分の1であり、そのように増加し続けます)。

何か問題が発生した場合、これは展開を停止するように、開発者を可能にしますが、からの最後の更新3.8には、3.8.1100%の成功率を持っています。

によって選択されたサイト1 out of 128は実際にはランダムです。そうではありませんが、知りたい場合は次のように機能します。

更新が必要なサイトのURLは、を使用してハッシュされMD5ます。このハッシュの最初の3文字だけを使用してに変換するとbase10、4096の可能性が生じます。更新は、0〜31(4096/32 = 128)の間の計算数を持つサイトで開始されました。

さて、私はそれが結局かなりランダムだと思う;)

私の場合、多くのWordPressサイトを運営しているので、更新には1日かかりました。すべてのページが更新されたのを見るのはかなり面白かったです。

念のために:D

ところで、ここにmake.wordpress.orgの記事があり、そのプロセスを説明しています。


「wp.orgからサイトへのリクエストによって開始された」場合、それはどのように安全ですか?誰もあなたのサイトにリクエストを送信できませんでしたか?
不機嫌なヤギ14年

実際、これが技術的にどのように処理されるかはわかりません。しかし、ナンスやリクエストの送信元など、セキュリティチェックがあると確信しています。
フィスキ14年

1
@fischi wp.orgがアップデートを開始する情報を得ましたか?wp.​​orgが更新を開始するか、wordpressサイトが更新を確認してから、wp.orgが更新があることを通知した場合に更新自体を開始することには大きな違いがあります。
クラフトナー14

1
この答えは実際には間違っています。更新プロセスは、WordPress.orgによってサイトに対して開始されることはありません。あなたのサイトは確かにそれを開始するために何らかの形のトラフィックを持っている必要がありますが、WordPress.orgはあなたのサイトを直接pingしません。
オットー14年

1
わかりましたが、「wp.orgからサイトへのリクエストによって開始された」は正しくありません。サイトが更新要求を行い、応答が更新があるかどうかを示します。それは逆ではなく、サイトがプロセスを開始する必要があります。
オットー14年

1

広義には、ユーザーがサイトにアクセスすると、ワードプレスはタイマーの有効期限をチェックし、有効期限が検出されると、期限切れイベントに関連するアクションを「実行」するために別のリクエストがサーバーに送信されます。サーバーが別のプロセスで実際のアクション(この場合はアップグレード)を実行しているため、ユーザーがページの読み込みに顕著な遅延を感じないのはこのためです。

これは機能しますが、タイミングはあまり正確ではありません。サイトのトラフィックが多いほど、サイトの正確性は高まります。

より良いパフォーマンスとより正確なタイミングを取得したい人は、ワードプレスが持つ内部cron「プロセス」をブロックし、OS cronプロセスを使用してタイマーのチェックをトリガーできます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.