WP_CRONを無効にし、代わりに数分ごとにサーバーからwp-cron.phpをトリガーする必要がありますか?


12

WordPressがページをロードするたびにWP CRONを不必要に起動するようです。毎回実行するのではなく、サーバー経由で5分ごとに実行するようにスケジュールするだけではどうでしょうか。5分ごとにwp-cron.phpをトリガーするだけで、望ましい結果を得ることができますか?

これには欠点がありますか?

回答:


15

サーバーのcronジョブを使用してWP CRONを実行することの欠点はありません。実際、これは推奨される方法です。

公式WordPressプラグイン開発ドキュメントによると:

WP-Cronは継続的に実行されません。これは、時間どおりに実行する必要がある重要なタスクがある場合に問題になる可能性があります。これには簡単な解決策があります。希望する間隔で(または必要な特定の時間に)実行するようにシステムのタスクスケジューラを設定するだけです。

これを行うには、最初にのデフォルトのcron動作を無効にする必要がありますwp-config.php

define('DISABLE_WP_CRON', true);

次に、wp-cron.phpサーバーからスケジュールします。Linuxの場合、これは次のことを意味します。

crontab -e

ただし、コマンドライン(CLI)で実行する代わりに、HTTPリクエストとして実行してください。そのために使用できますwget

*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron

WordPressは必要なすべてのコアファイル、プラグインなどをwp-cron.php次のコードでロードします。

if ( !defined('ABSPATH') ) {
    /** Set up WordPress environment */
    require_once( dirname( __FILE__ ) . '/wp-load.php' );
}

WordPressが重要な機能を読み込まないことを心配しないでください。


1
あなたが言及wget http://YOUR_SITE_URL/wp-cron.phpを追加せずに言及にリンクしたWordPress.orgのドキュメント?doing_wp_cron それでは、どちらが他より優れていますか??doing_wp_cron非バージョンにはない何を追加するのですか?
Garconis

おそらく、ログにクエリ文字列が表示されるので、確実に呼び出された方法がわかります。
Slbox

1
私はこれにまったく同意しません。まず第一に、それが「推奨される」ということは真実ではありません。第2に、このメソッドは、イベントをスケジュールする実際の推奨メソッドを使用するプラグインを無効にします。これは本当に悪いアドバイスだと思います。特に理由がない限り、誰もcronをオフにするべきではありません。私が考えることができる唯一の理由は、CDNか何かのためにWordPressを分割している場合です。これは通常の方法ではありません。
John Dee

1
@JohnDee:このメソッドは実際にはcronを無効にしません。各ページの読み込み時にcronジョブをチェックして実行しようとするWP Cronメソッドを無効にします。define('DISABLE_WP_CRON', true);cronプロセスのその部分のみを無効にしてから、次のようなコードでcronスクリプトを呼び出し*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cronます:サーバーでcronジョブが実行されることを確認します。どのスケジューリングプラグインも違いを知りません。
Fayaz

1
このテーマに関するWordPress.orgのドキュメントリンクがdeveloper.wordpress.org/plugins/cron/…に
aldemarcalazans

2

いくつかの欠点があります。まず、wp-cron.phpをcliとして使用する場合、$ _ SERVER変数などが設定されません。人々は代わりにwp-cron.phpへのcurlリクエストを使用することでこの制限を克服しています。

2つ目は、WP自体にwp-cron.phpが読み込まれていないためです。SMTPメーラープラグインを使用している場合は、wp-cronを呼び出したときに読み込まれません。この場合も、curl呼び出しを使用すると、この問題が無効になります。カールは最も頻繁に使用される方法のようです。

しかしながら; Postfixのメール設定と(nginxの場合)php-fpm configを正しく設定し、次のようなcrontabを設定した後、wp-cliを使用したい

*/5    *   *   *   *  wp cron event list --skip-plugins --skip-themes --path="/var/www/vhosts/example.com/httpdocs/wp" --fields=hook,next_run_relative --format=csv | awk -F, '$2=="now" {print $1}' | xargs -r wp --path="/var/www/vhosts/example.com/httpdocs/wp" cron event run $1

(csv形式で特定のフィールドを持つすべてのcronをリストします-フックはcronの名前です。次の実行は時間です。AWKを使用して「今」が次の実行(今が期限)として表示されているものを取り除き、そのリストをxargsに渡します。wp cron event run $HOOK各cronで呼び出します。)wp-cliを使用すると、WordPressが正しく読み込まれます(cronを一覧表示するときにプラグインをスキップすることを選択します。コードerrosとphp警告がスクリプト出力を台無しにするためですが、xargsを使用してcronを実行する場合はスキップしません。 cronはプラグインをロードする必要があるかもしれません)

これがあなたに気をつけるべきことのいくつかの指針を与えてくれることを願っています。


2
どのように設定について:/ 15 * * * wgetの-q -O - yourdomain.com/wp-cron.php?doing_wp_cron TomMcFarlinによって示唆されているように- tommcfarlin.com/wordpress-cron-jobs。うまく仕事をしているようです。あなたのコメントをいただければ幸いです。
TheBigK 2017年

ええ、私が人々の間で述べたように、cron(wgetまたはその他のhttp呼び出し)を使用してcronをトリガーすることを選択しましたが、その方法には何の問題もありません。必要なファイルが含まれていないwp-cron phpファイルを直接呼び出す問題と、少し工夫したい場合は別の方法をアドバイスしていました。
TechnicalChaos

0

wp-cronを無効にしない理由はたくさんあります。実際、これを行うためのユースケースを見つけることはほとんど不可能です。それはあなたのサイトを遅くすることはありません、そしてあなたが気付かないかもしれないもののために使われます。

多くのプラグインはWP-Cronを使用して物事をスケジュールします。スケジューラをオフにすると、混乱する可能性があります。

混乱を招くため、また、無効にしてもサイトに大きな影響を与えないため、このテーマに関するチュートリアルは急増しています。それが行うことは、開発者が6か月で作成する不可解な問題を修正する必要がある頭痛の種です。

また、WPハートビートは管理領域で15秒ごとに起動し、99%の人がこの問題を解決していると考えています。


2
これはひどい反応です-彼らはWP Cronを無効にしていません。それらは単にページロード時のWP Cronの呼び出しを無効にし、代わりにシステムcronデーモンにオフロードしています。シーッシュ。
バリーチャップマン

とにかく、そのままにしておく主な理由は、多くのプラグインが拡張されたバックグラウンドタスクの実行にcronを使用していることです。システムが標準的な方法で動作することを期待しているため、NEXT担当者がやっていることを台無しにすることができます。幸運を!
John Dee

プラグインがwp cronが無効になっている場合に完全に機能しないようにコーディングされている場合、それは無能な人によってプログラムされていることを意味します。すぐにアンインストールすることをお勧めします。
Magnetic_dud

さて、ここの2つのコメントは私の主張を証明しています。あなたは1人の開発者が「これはcronを無効にせず、それをOS cronに大雑把にシャッフルします」と言っています-これはOSニュートラルであるWordPressのブレークです。次に、別の開発者は「ねえ、WP cronの消滅を計画するのはプラグイン開発者の責任です」と言います。ええと、わかりました。したがって、cron機能が必要な場合は、cronシステムを排除するために計画を立てる必要がありますか?何に?バックアップcronシステム?そのコメントは意味がありません[明らかに]。
ジョンディー

とにかく、現状は「TOTAL CONFUSION」です。それが現状です。フレームワークPOVからの唯一の解決策は、人々に伝えることです。WP-CRONシステムが存在する理由があります。オフにしないでください。他のオプションは、10,000の異なる、さまざまな意見です。私たちが今持っているのはそれです。
ジョンディー

0

私はまだwp-cronを外部サービスにオフロードすることの本当の欠点を見つけていません。長年これをやっています。

特に、アプリケーションをマイクロサービスとして実行できる今日の世界では。

各WordPressコンポーネント(php、web、db、crontab、redisなど)に個別のDockerコンテナーを使用しています。crontabを別のコンテナーとして使用し、ローカルネットワークを使用してhttp経由でwp-cronを呼び出し、必要なときにのみ実行する

これにより、バックエンドノードへの負荷が軽減され、攻撃対象領域が小さくなるため、セキュリティが向上します。

開発者がページの読み込みごとにwp-cronを呼び出さなくても、どうすればよいかわからない場合は、これは単に経験不足を表しています。「そのままにしておく」というのは、物事がどのように機能するか理解していないからです。

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