수천 개의 크론 작업 삭제


16

비활성화 및 삭제 된 플러그인의 WordPress 데이터베이스에 29,000 개의 cron 작업이 있음을 발견했습니다. 나는 많은 최적화 플러그인을 시도했지만 많은 cron 작업은 플러그인을 사용하여 삭제할 수 없다는 것을 의미합니다.

나는 또한 성공하지 않고 functions.php에서 이것을 시도했다.

add_action("init", "clear_crons_left");
function clear_crons_left() {
    wp_clear_scheduled_hook("cron_name");
}

phpmyadmin에서 cron hook으로 검색하고 제거하기 위해 사용할 수있는 SQL 명령이 있습니까?


나는 WP 대량 삭제를 발견하고 조심스럽게 사용하고 한 번에 삭제할 최대 항목을 넣었습니다
Zwelly

답변:


18

신속한 답변과 조언에 감사드립니다.

나는 당신의 대답을보기 전에 그 주위에 방법을 찾았습니다. 다음은 수천 개의 오래된 크론 작업을 삭제하기위한 단계별 방법이며 다른 사람이 사용할 수 있습니다.

phpMyAdmin에 로그온했습니다. 데이터베이스를 클릭 한 다음 '검색'탭을 클릭했습니다. 'cron'을 입력 한 다음 '모든 테이블'을 선택하고 '이동'을 클릭했습니다. 검색 결과 목록을 내 wp_options 테이블로 스크롤했습니다. '찾아보기'를 클릭했습니다. 목록의 맨 위에는 option_name 'cron'이있었습니다. '수정'을 클릭 한 다음 페이지가로드 될 때까지 기다렸습니다. cron 작업 목록이 표시된 상자를 클릭했습니다. cron 목록이 너무 커서 커서가 응답하는 데 약 80 초가 걸렸습니다. 그런 다음 키보드에서 Ctrl-A를 사용하여 삭제 버튼을 누르기 전에 모두를 선택했습니다. 브라우저가 삭제를 완료하는 데 약 2 분이 걸렸습니다 (크롬 시간이 초과되어 Firefox를 사용해 보았습니다).

몇 분 후에 현재 활성화 된 플러그인의 cron 작업이 목록을 다시 채웠습니다. 9 개의 크론 작업이있었습니다 (29,000 개 이상 감소). 잘못 코딩 된 플러그인에서 6 년간 중복 된 크론 작업 (일부 설치 한 경우). 또한 과거에 제거했던 Wordfence, BackupBuddy, Nextgen Gallery 및 AutoOptimizer와 같은 일반적인 플러그인에서도 수백 가지가 있습니다. 내 사이트는 이제 터보 차징 된 것처럼로드됩니다. 관리 영역이 훨씬 빠릅니다. 관리자 시간 초과 오류가 사라졌습니다. 로드 시간을 줄이려고 웹 사이트를 최적화하는 데 많은 시간을 보냈습니다. 심지어 호스트를 옮기고 호스팅 계획을 업그레이드했습니다. 오래된 크론 작업을 모두 삭제하는 것처럼 내 사이트의 속도를 높이는 것은 없습니다. 모바일 다운로드 시간이 20 초에서 6 초로 줄었습니다.

솔루션을 검색 할 때 cron 작업이 웹 사이트 성능에 미치는 영향에 대한 정보는 거의 없었습니다. 많은 사람들은 그것이 거의 차이가 없으며 적은 수의 cron 작업에 대해서는 사실이라고 말했습니다. 그러나 WordPress 사이트의 수명에 수년이 지나면 삭제 된 플러그인에서 수천 개의 오래된 cron 작업이 아니라면 수백 명이 얼마나 많은지 궁금합니다. 사용자에게 PHP 메모리 제한을 확인하도록 요청하는 대신 개발자가 먼저 치명적인 메모리 오류 문제를 해결할 때 wp_options에서 cron 작업 수를 확인하도록 요청하는 것이 좋습니다. 찾은 내용에 놀라거나 충격을 줄 수 있습니다! :-)


1
나는 같은 문제를 발견했다. 나는 지금 얼마나 많은 cron 작업을 가지고 있지는 않지만 데이터베이스에서 약 15MB였습니다. 삭제 후 관리 영역로드 시간이 5-7에서 0.3 초로 감소했습니다. 프런트 엔드로드 시간이 2 초에서 0.4 초로 감소했습니다.
Alexey

1
젠장! 이 솔루션은 우리를 구했습니다! 이 테이블에 35000 개의 크론 작업이있었습니다. 이제 설명대로 과급 된 것 같습니다.
리카르도

클라이언트에 대해 언급 된 플러그인 중 하나를 설치하려고했기 때문에 실제로 아는 것이 좋습니다. 이제 성능이 서서히 저하 될 때주의해야 할 사항을 알게되었습니다.
lowtechsun

10

시험

SELECT * FROM `wp_options` WHERE option_name = 'cron'

당신이 그것을 찾으면 시도 할 수 있습니다 :

  • SQL에서 : UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'
  • 워드 프레스에서 : update_option('cron', '');

cron 옵션을 삭제하거나 값을 빈 직렬 배열로 설정해야합니다.

값이 직렬화 된 빈 배열인지 빈 문자열인지 확실하지 않으므로 update_option을 사용하는 것이 안전합니다. wp-includes / options.php를 체크인 할 수는 있지만 update_option을 사용하면 데이터베이스에 대한 걱정없이 올바르게 처리 할 수 ​​있습니다.


7

WP-CLI를 사용하여 명령 줄에서 Wordpress cron 이벤트를 지울 수도 있습니다 .

wp cron event list
wp cron event delete your_example_event

wp-cli docs 에서 자세한 내용을 확인하십시오 .


3
또는 모든 이벤트를 삭제wp option delete cron
Samuel Elh

1
wp option delete cron옵션에 수천 개의 크론 작업이있을 때 작동합니다. 이러한 나쁜 작업은 대부분 잘못된 플러그인에서 발생하며 cron을 잘못된 방식으로 수행합니다.
Swashata Ghosh

6

더 간단한 해결책은 delete_option( 'cron' );일부 플러그인에서 한 번만 호출하는 것 입니다. 다음에 사이트를 방문 / 요청하면 자동으로 추가 된 모든 크론 작업이 다시 추가됩니다.

활성화 할 때마다 실행되는 경우 (mu) 플러그인 :

<?php
/** Plugin Name: Clean Cron */
register_activation_hook( __FILE__, function()
{
    delete_option( 'cron' );
} );

카이저 감사합니다! 플러그인 생성 / 편집에 익숙하지 않은 사람들을 위해 (간단합니다!) functions.php 파일에서 kaiser가 언급 한 것을 사용할 수 있습니다. 추가하고 저장 한 다음 사이트를로드 한 다음 제거하고 다시 저장하십시오.
Privateer

플러그인 활성화로 작성된 cron 작업은 어떻습니까? 이 cron 작업은 플러그인을 비활성화했다가 다시 활성화 할 때까지 다시 작성되지 않습니다.
alpipego

글쎄, 이것이 기본값 이나 다른 질문과 함께 불가능합니다 . 플러그인을 비활성화했다가 다시 활성화하거나 (~ 3 분) 자동 응답을 검색하는 경우 해당 플러그인의 기능을 검색하여 플러그인 내에서 트리거해야합니다.
kaiser

1

누군가 특정 cron 이름 (예 : 'CRON_NAME')을 지우고 싶다면이 솔루션이 효과적이었습니다.

    $crons = _get_cron_array();
    //echo "Found total ".count($crons)."<br />";
    //Keep only the ones that don't match the cron name
    $updated = array_filter($crons, function($v){return !array_key_exists("CRON_NAME",$v);});
    //echo "Reduced to ".count($updated)."<br />";        
    _set_cron_array($updated);

1

1 년 동안이 단일 데이터베이스 항목에 대해 약 5MB의 보류중인 크론 작업이있었습니다. 데이터베이스에서 크론 작업을 삭제했습니다. wp-config.php에서 비활성화 된 크론 작업

cpanel에서 수동 크론 작업을 설정하십시오. 이제 내 사이트는 말 그대로 날고 있습니다. 서버를 업그레이드하고 더 많은 CPU / RAM을 구입했지만 비용과 시간이 낭비되었습니다.

보류중인 모든 크론 작업을 삭제하려면 phpmyadmin> 쿼리 실행에서이 쿼리를 실행하십시오.

UPDATE wp_options SET option_value = '' WHERE option_name = 'cron'

Pádraig Ó Beirn에게 감사드립니다.


천만에요! 나는 그것이 도움이 된 것을 기쁘게 생각합니다. 보류중인 크론 작업에 대한 팁도 감사합니다.
Pádraig Ó Beirn

0

이 방법으로 cron 작업을 지우고 UpdraftPlus를 사용하는 경우 cron 작업을 재생성하려면 설정을 다시 저장해야합니다. 이렇게 할 때까지 자동 백업은 실행되지 않지만 수동 백업은 실행됩니다.

설정은 그대로 유지되며 아무 것도 편집 할 필요가 없습니다. [UpdraftPlus 최상위 메뉴]-> 설정으로 이동 한 다음 아래로 스크롤하여 "변경 사항 저장"을 클릭하십시오.


0

나는 sm_pingcronjobs 의 엄청난 양 때문에 여기에 도착 했다 wp_options. 그것이 당신의 문제라면, 당신은 다음을 시도 할 수 있습니다 :

phpmyadmin에 액세스 할 수없는 경우, 특히 사이트에 ping cronjobs (sm_ping)이 팽팽한 경우 functions.php (자식 테마)에 이것을 넣으십시오.

if (isset($_GET['doing_wp_cron'])) {
remove_action('do_pings', 'do_all_pings');
wp_clear_scheduled_hook('do_pings');
}

0

비슷한 문제가 발생했습니다. 내 코딩 오류 중 하나 때문에 특정 cron 작업의 수천 복사본이 사이트에 추가되었습니다. wp_clear_scheduled_hook 함수가 시간 초과되어 실패했습니다. 배열 내에서 cron 함수의 모든 인스턴스를 설정 해제 한 다음 옵션 테이블에서 필터링 된 배열을 새 cron 옵션으로 추가하는 스크립트로 해결했습니다. 아래를 참조하십시오.

이런 식으로, 나는 이전에 사이트에 추가 된 바람직한 크론 작업을 날려 버리지 않았다.

핸들 배열을 제거하거나 핸들 배열을 유지하는 함수로 수정할 수 있습니다.

$crons = _get_cron_array();
    $hook = 'tj_flush_w3tc_cache';
    foreach ( $crons as $timestamp => $cron ) {
    if ( isset( $cron[ $hook ] ) ) {
        unset($cron[$hook]);
    }
    if(!empty($cron))
        $newcron[$timestamp] = $cron;       
    }
    update_option('cron',$newcron);

0

모든 cron 이벤트를 삭제하는 매우 간단한 방법이 있습니다. 이전에는 wp-config에서 WP Cron을 비활성화해야합니다. 그런 다음 플러그인 WP 제어를 설치 한 다음 도구 메뉴로 이동> Cron 이벤트> 모두 선택> 모두 삭제를 클릭하십시오. 당신이 그것을 시도 할 수 있습니다. 감사.

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