manual cron jobs 1

워드프레스에서 wp-cron.php 비활성화하여 사이트 속도 향상시키기

개요

WordPress에서는 wp-cron.php라는 파일을 사용하여 가상 Cron 작업이나 예정된 글 게시, 플러그인/테마 업데이트 확인, 알림 이메일 송부 등과 같은 작업을 자동으로 수행합니다.

기본적으로 워드프레스는 예정된 작업이 있을 때 누군가가 워드프레스 사이트를 방문할 때마다 wp-cron.php를 호출하도록 설정되어 있습니다.

트래픽이 적은 사이트의 경우에는 아무 문제가 없지만 방문자들이 방문할 때 여러 번 예정된 작업을 확인하는 것은 매우 비효율적일 수 있고 서버에 리소스 사용량 문제를 야기하고 사이트 로딩이 느리게 할 수 있습니다.

wp-cron.php 비활성화하기

얼마 전에 워드프레스 사이트가 매우 느려지는 일이 있었습니다. 웹호스팅 담당자에게 확인해보니 wp-cron.php이 너무 많이 호출되어 있어서 사이트 리소스가 부족해져서 나타나는 현상이라는 말을 들었습니다. (사실 알고 보니 이것은 표면적인 문제였고 근본적인 원인은 다른 곳에 있었습니다.) 그래서 wp-cron.php를 비활성화한 적이 있었습니다. wp-cron.php를 비할성화하려면 다음과 같이 wp-config.php 파일에 define(‘DISABLE_WP_CRON’, ‘true’);만 추가해주면 됩니다.

/** The Database Collate type. Don't change this if in doubt. */
define('DB_COLLATE', '');

define('DISABLE_WP_CRON', 'true');

수정한 후에 저장하도록 합니다. 그러면 새로운 방문자가 사이트를 방문하더라도 wp-cron.php 파일이 자동으로 실행되지 않습니다.

수동으로 wp-cron.php의 Cron 작업 설정하기

wp-cron.php를 비활성화하면 워드프레스에서 수행해야 하는 자동 작업이 실행되지 않습니다. 이 경우 수동으로 실행되도록 설정할 수 있습니다. 다음 방법은 Bluehost와 같이 cpanel을 제공하는 경우에 이용할 수 있습니다.

  1. cpanel에 로그인합니다.
  2. advanced > Cron Jobs를 클릭합니다.
  3. Common Settings 드롭다운에서 Once Per Hour를 선택합니다.
    manual cron jobs 1
  4. Hour 드롭다운에서 Every Sixth Hour를 선택합니다.
    manual cron jobs 2
  5. 이제 마지막으로 아래의 빈 칸에 다음과 같이 입력합니다.
    cd /home/username/public_html; php -q wp-cron.php
  6. username은 cpanel 사용자 이름입니다. “Add New Cron Job“을 누르면 새로운 Cron 작업이 추가됩니다.
    manual cron jobs 3
  7. 이제 새로운 Cron 작업이 추가되어 있는 것을 볼 수 있습니다. 위와 같이 설정하면 6시간마다 wp-cron.php 스크립트를 실행하게 됩니다.

Cron 작업이 실행될 때마다 Cron Email 섹션에 입력한 이메일 주소로 통지가 전송됩니다. 또는, Command 라인에 다음과 같은 코드를 사용할 수도 있습니다.

wget http://www.yoursite.com/wp-cron.php?doing_wp_cron=1 > /dev/null 2>&1

또는 일부 시스템에서는 curl 함수가 사용될 수도 있습니다.

curl -s http://www.yoursite.com/wp-cron.php?doing_wp_cron=1 > /dev/null

자세한 내용은 이 글을 참고해보시기 바랍니다. wp_schedule_even를 사용하여 수동으로 Cron 작업을 예약하는 방법은 “Properly Setting Up WordPress Cron Jobs” 글을 참고해보세요. (> /dev/null 2>&1를 추가하면 스크립트를 조용히(silent) 실행하고 어떠한 출력도 생성하지 않습니다. 이 글에 이 내용에 대해 자세히 설명되어 있네요.)

WP_CRON_LOCK_TIMEOUT

다른 방법으로 WP_CRON_LOCK_TIMEOUT을 사용하여 Cron 작업이 실행될 시간을 조정할 수 있습니다. 워드프레스가 로드되면 Cron 작업이 실행 중(lock 상태)인지 확인합니다. Cron이 실행되지 않으면 Lock을 만들려고 시도하고, Lock Timeout에 도달하지 않은 경우 Cron이 실행되지 않습니다.

실행 중인 Cron 작업이 없고 Timeout이 경과한 경우 Cron이 실행됩니다(참고). 다음과 같은 코드를 wp-config.php에 추가하도록 합니다.

define('WP_CRON_LOCK_TIMEOUT', 3600);

위에서 숫자는 초를 나타내면 3600은 60분을 의미합니다.



기부를 통해 이 블로그를 후원하실 수 있습니다.
워드프레스 설치/제작/문제해결이 필요한 경우 서비스(유료)를 요청해주세요.