클라우드웨이즈 워드프레스 자동 업데이트, 예약 발행 실패? Cron Job 설정으로 해결

워드프레스 사이트를 운영하다 보면 예약 발행한 글이 제때 발행되지 않거나, 플러그인과 테마의 자동 업데이트가 실패하는 경우를 종종 겪게 됩니다. 이런 문제는 대부분 워드프레스의 백그라운드 작업을 담당하는 '가상 크론(WP-Cron)'이 제대로 동작하지 않기 때문에 발생합니다.

특히 서버 단에서 강력한 캐싱 설정을 제공하는 호스팅 환경일수록 이런 현상이 두드러집니다. 캐싱 레이어가 요청을 가로채면서 WP-Cron을 트리거하는 방문자 트래픽 자체가 워드프레스 코어까지 도달하지 못하는 경우가 있고, 그 결과 예약 발행이 지연되거나 자동 업데이트가 아예 실행되지 않는 것입니다.

저 역시 클라우드웨이즈에서 하위 폴더에 설치한 워드프레스 사이트에서 플러그인과 테마 자동 업데이트가 실패하는 현상을 겪었습니다. 이런 경우에는 워드프레스 자체의 가상 크론에 의존하는 대신, 애플리케이션 단에서 서버 크론 작업(Cron Job)을 직접 등록해 주기적으로 wp-cron.php를 호출하도록 설정하면 문제를 해결할 수 있습니다.

💡 클라우드웨이즈 가입 방법 (+ 60% 할인 쿠폰)

워드프레스 예약 발행이나 테마/플러그인 자동 업데이트가 실패하는 이유

워드프레스 예약 발행이나 테마/플러그인 자동 업데이트가 실패하는 이유

워드프레스의 기본 크론 시스템인 WP-Cron은 서버 운영체제에서 백그라운드로 항시 돌아가는 '리얼 크론(Real Cron)'과 달리, 누군가 사이트를 방문할 때만 작동하는 '가상 크론(Virtual Cron)'입니다. 이로 인해 다음과 같은 상황에서는 실행이 되지 않거나 실행이 지연될 수 있습니다.

  • 방문자 트래픽 부족: WP-Cron은 방문자가 사이트에 접속할 때마다 대기 중인 예약 작업이 있는지 확인하고 실행합니다. 따라서 방문자가 적은 새벽 시간대나 전체 트래픽이 부족한 사이트에서는 예약된 시간에 크론이 작동하지 않아 예약 발생이 지연되거나 실패할 수 있고 자동 업데이트가 지연될 수 있습니다.
  • 강력한 서버 캐시 적용: 클라우드웨이즈의 Varnish 캐시나 클라우드플레어(Cloudflare) 같은 CDN을 사용할 경우, 방문자가 접속하더라도 서버는 이미 저장된 정적 캐시 페이지만 보여주고 워드프레스 코어(PHP)를 호출하지 않기 때문에 WP-Cron이 트리거되지 않습니다.
  • 하위 디렉터리(Sub-directory) 설치 구조: 메인 도메인이 아닌 하위 폴더(예: example.com/blog/)에 워드프레스를 독립적으로 설치한 경우, 방문자가 주로 메인 웹사이트에 머무른다면 하위 폴더에 있는 워드프레스 크론은 실행될 기회를 얻지 못합니다.
  • 보안 플러그인 및 서버 방화벽 차단: 워드프레스가 내부적으로 wp-cron.php를 호출하는 과정을 '루프백 요청(Loopback Request)'이라고 합니다. 간혹 보안 플러그인이나 서버 방화벽(WAF)이 이러한 자체 요청을 비정상적인 봇 접근으로 간주하여 차단하는 경우가 있습니다.
  • 서버 리소스 제한 및 타임아웃: 대규모 플러그인 업데이트, 데이터베이스 최적화 등 무거운 백그라운드 작업이 실행될 때 PHP 실행 시간 제한(Timeout)에 걸리거나 메모리가 부족해지면, 현재 실행 중인 크론 작업이 중단되면서 대기 중인 예약 발행 등의 작업까지 줄줄이 실패할 수 있습니다.

클라우드웨이즈의 Cron Optimizer 옵션

클라우드웨이즈에 워드프레스 애플리케이션을 설치하면 저는 항상 Cron Optimizer 옵션을 활성화합니다.

Cron Optimizer는 방문자 트래픽에 의존하는 워드프레스의 기본 가상 크론(WP-Cron)을 자동으로 비활성화하고, 이를 서버 자체의 맞춤형 리얼 크론으로 대체하여 백그라운드 작업을 최적화하는 기능입니다.

이 기능을 활성화하면 방문자가 없는 시간대에도 예약 발행이나 플러그인 자동 업데이트 같은 필수 작업이 지연 없이 정확하게 실행되며, 불필요한 가상 크론 호출을 원천 차단하여 서버 리소스 낭비를 막고 사이트의 전반적인 성능과 안정성을 크게 높일 수 있습니다.

하지만 Cron Optimizer를 활성화해도 예약 발행이 실패하는 경우가 드물게나마 발생할 수 있습니다. 저는 이 옵션을 켜둔 상태에서도 종종 예약 발행이 실패하는 경험을 했는데, 올해 들어서는 그런 문제 없이 안정적으로 작동하는 것 같습니다.

Cron Optimizer를 활성하려면 클라우드웨이즈에 로그인하여 애플리케이션 목록에서 해당 애플리케이션(워드프레스)을 클릭하여 애플리케이션 관리 화면으로 이동합니다.

아래와 같은 화면이 표시되면 왼쪽의 Application Settings(애플리케이션 설정)를 클릭하고 애플리케이션 설정 화면으로 이동합니다. 애플리케이션 설정에서 WordPress(워드프레스) 탭을 클릭합니다.

클라우드웨이즈 애플리케이션 설정

맨 아래로 스크롤하여 Cron Optimizer 옵션을 활성화/비활성화할 수 있습니다.

클라우드웨이즈 Cron Optimizer 활성화

애플리케이션 설정에서 Object Cache Pro를 활성화할 수 있고, XMLRPC 액세스와 WEBP 리디렉션을 활성화/비활성화할 수 있습니다.

  • XMLRPC는 일반적으로 비활성화하시기 바랍니다.
  • Converter for Media 플러그인을 설치한 경우에는 웹스택(WebStack)을 Hybrid Stack으로 설정하고 WEBP Redirection 옵션을 활성화해야 합니다.

수동으로 Cron Job 설정하기

상기의 방법을 이용해도 예약 발행에 실패하거나 워드프레스 테마/플러그인의 자동 업데이트가 실패하는 경우 수동으로 Cron Job을 설정할 수 있습니다.

저는 하위 폴더에 몇 개의 워드프레스 사이트를 추가로 설치하여 관리하고 있습니다. 루트 폴더에 설치된 사이트에서는 문제가 없지만, 하위 디렉터리에 설치된 워드프레스(예: example.com/forum/)에서는 테마와 플러그인의 자동 업데이트가 제대로 작동하지 않았습니다.

워드프레스 플러그인 자동 업데이트 실패

위의 그림과 같이 플러그인 자동 업데이트가 제대로 이루어지지 않고 "7개월 동안 자동 업데이트가 지연됨. WP-Cron에 문제가 있을 수도 있습니다" 메시지가 표시되었습니다.

이와 같은 문제를 경험하고 있다면 애플리케이션 관리 페이지의 Cron Job Management » Advanced 탭에서 수동으로 크론 작업을 추가할 수 있습니다.

클라우드웨이즈 크론 작업 추가

Advanced Cron(고급 크론) 입력 상자에 다음과 같은 형식으로 추가할 수 있습니다.

0,30 * * * * wget -q -O - "https://example.com/wp-cron.php?doing_wp_cron" >/dev/null 2>&1

동작 방식

  • 0,30 : 분 자리에 0과 30을 콤마로 나열 → 매시 정각(0분)과 매시 30분, 이렇게 하루에 총 48번 실행
  • 나머지 * * * *(시, 일, 월, 요일)은 모두 *이므로 하루 24시간 내내 이 패턴이 반복됨

저는 하위 디렉터리에 설치된 3개의 사이트에 대하여 1시간 간격으로 각각 다른 시간대에 크론 작업이 실행되도록 설정했습니다.

예시:

[분] * * * * wget -q -O - "URL" >/dev/null 2>&1

동작 방식

  • 16 * * * * : 매시 16분에 실행 (시, 일, 월, 요일 자리가 모두 *이므로 하루 24시간, 매일 반복)
  • wget -q -O - : 조용히(-q, 로그 미출력) 요청을 보내고 응답 본문은 표준출력(-O -)으로 흘려보냄
  • /dev/null 2>&1 : 표준출력과 표준에러를 모두 버림 → 서버에 별도 로그가 쌓이지 않음

그리고 SFTP에 접속하여 wp-config.php 파일에 다음 라인이 추가되어 있지 않으면 추가하도록 합니다.

define('DISABLE_WP_CRON', true);

이미 서버 크론(Real Cron)을 세팅했으므로, 방문자가 접속할 때마다 가상 크론이 불필요하게 체크되는 것을 막아 서버 효율을 극대화할 수 있습니다.

참고

댓글 남기기

댓글 남기기