WP_CRON을 비활성화하고 대신 몇 분마다 서버에서 wp-cron.php를 트리거해야합니까?


12

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

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

답변:


15

서버의 크론 작업을 사용하여 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에 대해 걱정하지 마십시오.


1
wget http://YOUR_SITE_URL/wp-cron.php추가하지 않고 멘션에 링크 한 WordPress.org 문서 ?doing_wp_cron 하나가 다른 것보다 낫습니까? ?doing_wp_cron버전이 아닌 다른 기능이 추가 되지 않는 것은 무엇입니까?
Garconis

아마도 로그에 쿼리 문자열이 표시되어 확실하게 호출 된 방법을 알 수 있습니다.
Slbox

1
나는 이것에 전혀 동의하지 않습니다. 우선, "권장"이 사실이 아닙니다. 둘째,이 방법은 실제로 권장되는 이벤트 예약 방법을 사용하는 모든 플러그인을 손상시킵니다. 나는 이것이 정말로 나쁜 조언이라고 생각합니다. 특별한 이유가 없다면, 아무도 크론을 꺼서는 안됩니다. 내가 생각할 수있는 유일한 이유는 CDN이나 다른 것을 위해 WordPress를 깨뜨리는 것입니다. 이것은 일반적인 관행이 아닙니다.
John Dee

1
@ JohnDee :이 방법은 실제로 cron을 비활성화하지 않으며 각 페이지로드에서 cron 작업을 확인하고 실행하는 WP Cron 방법을 비활성화합니다. define('DISABLE_WP_CRON', true);cron 프로세스의 해당 부분 만 비활성화 한 다음 */5 * * * * wget -q -O - https://your-domain.com/wp-cron.php?doing_wp_cron서버에서 다음 과 같은 코드로 cron 스크립트를 호출하면 cron 작업이 실행됩니다. 모든 일정 플러그인은 차이점조차 알지 못합니다.
Fayaz

1
이 주제에 대한 WordPress.org 문서 링크로 변경 developer.wordpress.org/plugins/cron/...
aldemarcalazans

2

몇 가지 단점이 있습니다. 첫째, 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에는 플러그인이로드되어야 할 수도 있습니다)

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


2
어떻게 설정에 대한 : / 15 * * * wget을 -q -O - yourdomain.com/wp-cron.php?doing_wp_cron TomMcFarlin에 의해 제안 - tommcfarlin.com/wordpress-cron-jobs . 일을 잘하는 것 같습니다. 귀하의 의견에 감사드립니다.
TheBigK

예, 사람들이 언급 한 것처럼 컬 (wget 또는 다른 http 호출)을 사용하여 크론을 트리거하기로 선택하면 해당 방법에는 아무런 문제가 없습니다. 필자는 wp-cron php 파일을 직접 호출하는 데 필요한 파일을 포함하지 않는 문제를 조언하고 있었고 약간의 향신료를 만들고 싶다면 다른 대체 방법을 조언했습니다.
TechnicalChaos

0

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

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

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

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


2
이것은 끔찍한 반응입니다-그들은 WP Cron을 비활성화하지 않습니다. 페이지로드에서 WP Cron 호출을 비활성화하고 대신 시스템 cron 데몬으로 오프로드합니다. esh.
Barry Chapman

어쨌든, 혼자 두는 주된 이유는 많은 플러그인이 이제 확장 백그라운드 작업 실행을 위해 cron을 사용하고 있기 때문입니다. 시스템이 표준 방식으로 작동하기를 기대하기 때문에 NEXT 담당자가 수행중인 작업을 망칠 수 있습니다. 행운을 빕니다!
John Dee

플러그인이 wp cron이 비활성화 된 경우 완전히 중단되는 방식으로 코딩 된 경우 무능한 사람이 프로그래밍했음을 의미하므로 즉시 제거하는 것이 좋습니다.
Magnetic_dud

글쎄, 여기에 두 가지 의견이 내 요점을 증명합니다. "이것은 cron을 비활성화하지 않고 OS cron으로 크게 섞습니다."라고 말한 사람이 있습니다. 이는 WordPress의 중단으로 OS 중립적입니다. 그런 다음 다른 개발자는 "이봐, 플러그인 개발자가 wp cron의 소멸을 계획하는 책임"이라고 말합니다. 알았어 cron 기능을 원한다면 cron 시스템 제거 계획을 세워야합니까? 무엇을? 백업 크론 시스템? 그 의견은 [분명히] 이해가되지 않습니다.
John Dee

어쨌든 현재 상태는 "TOTAL CONFUSION"입니다. 이것이 현재 상태입니다. 프레임 워크 POV의 유일한 해결책은 사람들에게 다음과 같이 알려주는 것입니다. WP-CRON 시스템이 존재하는 이유가 있습니다. 전원을 끄지 마십시오. 다른 옵션은 10,000 가지의 다양한 의견입니다. 우리가 지금 가지고있는 것입니다.
John Dee

0

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

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

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

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

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.