回答:
サーバーのcronジョブを使用してWP CRONを実行することの欠点はありません。実際、これは推奨される方法です。
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が重要な機能を読み込まないことを心配しないでください。
define('DISABLE_WP_CRON', true);
cronプロセスのその部分のみを無効にしてから、次のようなコードでcronスクリプトを呼び出し*/5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron
ます:サーバーでcronジョブが実行されることを確認します。どのスケジューリングプラグインも違いを知りません。
いくつかの欠点があります。まず、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はプラグインをロードする必要があるかもしれません)
これがあなたに気をつけるべきことのいくつかの指針を与えてくれることを願っています。
wp-cronを無効にしない理由はたくさんあります。実際、これを行うためのユースケースを見つけることはほとんど不可能です。それはあなたのサイトを遅くすることはありません、そしてあなたが気付かないかもしれないもののために使われます。
多くのプラグインはWP-Cronを使用して物事をスケジュールします。スケジューラをオフにすると、混乱する可能性があります。
混乱を招くため、また、無効にしてもサイトに大きな影響を与えないため、このテーマに関するチュートリアルは急増しています。それが行うことは、開発者が6か月で作成する不可解な問題を修正する必要がある頭痛の種です。
また、WPハートビートは管理領域で15秒ごとに起動し、99%の人がこの問題を解決していると考えています。
私はまだwp-cronを外部サービスにオフロードすることの本当の欠点を見つけていません。長年これをやっています。
特に、アプリケーションをマイクロサービスとして実行できる今日の世界では。
各WordPressコンポーネント(php、web、db、crontab、redisなど)に個別のDockerコンテナーを使用しています。crontabを別のコンテナーとして使用し、ローカルネットワークを使用してhttp経由でwp-cronを呼び出し、必要なときにのみ実行する
これにより、バックエンドノードへの負荷が軽減され、攻撃対象領域が小さくなるため、セキュリティが向上します。
開発者がページの読み込みごとにwp-cronを呼び出さなくても、どうすればよいかわからない場合は、これは単に経験不足を表しています。「そのままにしておく」というのは、物事がどのように機能するか理解していないからです。
wget http://YOUR_SITE_URL/wp-cron.php
を追加せずに言及にリンクしたWordPress.orgのドキュメント?doing_wp_cron
それでは、どちらが他より優れていますか??doing_wp_cron
非バージョンにはない何を追加するのですか?