WP_CRON을 비활성화하고 대신 몇 분마다 서버에서 wp-cron.php를 트리거해야합니까? 모든 페이지로드에서 WordPress가 불필요하게 WP

모든 페이지로드에서 WordPress가 불필요하게 WP CRON을 발생시키는 것처럼 보입니다. 매 방문마다 실행하는 대신 서버를 통해 5 분마다 실행되도록 예약하지 않는 이유는 무엇입니까? 5 분마다 wp-cron.php를 트리거하고 원하는 결과를 얻을 수 있습니까?

이것에 대한 단점이 있습니까?



답변

서버의 크론 작업을 사용하여 WP CRON을 실행할 때의 단점은 없습니다. 실제로 이것은 권장되는 방법입니다.

공식 워드 프레스 플러그인 개발 문서 에 따르면 :

WP-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에 대해 걱정하지 마십시오.


답변

몇 가지 단점이 있습니다. 첫째, wp-cron.php를 cli로 사용하면 $ _SERVER 변수와 같은 항목이 설정되지 않습니다. 사람들은 대신 컬 요청을 사용하여 wp-cron.php로이 제한을 극복합니다.

둘째, WP 자체에는 wp-cron.php가 포함되어 있지 않기 때문에; SMTP 메일러 플러그인을 사용하는 경우 wp-cron을 호출 할 때로드되지 않습니다. 다시 말하면 curl 호출을 사용하면이 문제가 무시됩니다. 컬이 가장 많이 사용되는 방법 인 것 같습니다.

하나; postfix 및 (nginx의 경우) php-fpm 구성에서 메일 설정을 올바르게 설정하고 crontab과 같은 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 형식의 특정 필드가있는 모든 크론을 나열하십시오-후크는 크론의 이름이며, 다음 실행 상대는 시간입니다. AWK를 사용하여 ‘지금’을 다음 다음 실행 (현재 예정되어 있음)으로 표시하는 것을 제거하고 해당 목록을 xargs에 전달하십시오. 전화 wp cron event run $HOOK로하지만, xargs를 가진 크론을 실행하는 경우를 건너 뛸 수 없습니다,. 코드하는 오류로, 제대로 (필자는 크론을 나열 할 때 플러그인을 건너 뛸 워드 프레스 WP-CLI 부하를 사용) 각 크론과 PHP 경고는 스크립트 출력을 망치는 것 cron에는 플러그인이로드되어야 할 수도 있습니다)

이것이 당신이 무엇을 찾아야하는지에 대한 포인터를 제공하기를 바랍니다.


답변

wp-cron을 비활성화하지 않는 데는 여러 가지 이유가 있습니다. 실제로,이를위한 유스 케이스를 찾는 것은 거의 불가능합니다. 사이트 속도를 늦추지 않으며 사용자가 모르는 것에 사용됩니다.

많은 플러그인은 WP-Cron을 사용하여 일정을 예약합니다. 스케줄러를 끄면 혼동 될 수 있습니다.

이 주제는 혼란스럽고 비활성화했을 때 사이트에 많은 영향을 미치지 않기 때문에이 주제에 대한 자습서가 급증합니다. 그것이 할 일은 6 개월 만에 신비한 문제를 해결 해야하는 개발자에게 두통을 유발합니다.

또한 WP Heartbeat는 관리자 영역에서 15 초마다 발생하여 99 %의 사람들이이 문제를 해결합니다.


답변

wp-cron을 외부 서비스로 오프로드하는 것에 대한 실질적인 단점을 아직 찾지 못했습니다. 몇 년 동안이 일을하고 있습니다.

특히 마이크로 서비스로 응용 프로그램을 실행할 수있는 오늘날의 세계에서.

PHPPress, web, db, crontab, redis 등 각 WordPress 구성 요소에 대해 별도의 Docker 컨테이너를 사용합니다. crontab을 별도의 컨테이너로 사용하고 로컬 네트워크를 사용하여 http를 통해 wp-cron을 호출하면 필요할 때만 실행됩니다.

이로 인해 백엔드 노드의 스트레스가 줄어들고 공격 영역이 작아 보안이 향상됩니다.

개발자가 모든 페이지로드에서 wp-cron을 호출하지 않고 작업을 수행하는 방법을 알 수 없다면, 이는 단지 자신을 대신하여 경험이 없음을 나타냅니다. 일이 어떻게 작동하는지 이해하지 못하기 때문에 “혼자 그대로두기”가 좋은 이유는 아닙니다.