웹사이트
Cron 작업 설정 및 관리
A cron job runs a command on a schedule, in the background, whether or not anyone is visiting your site. This guide covers adding one in KPanel, writing the schedule and the command correctly for…
Cron 작업은 사이트 방문 여부와 관계없이 백그라운드에서 일정에 따라 명령을 실행합니다. 이 가이드는 KPanel에서 작업을 추가하기, 이 플랫폼에 맞게 일정과 명령을 올바르게 작성하기, WordPress의 신뢰할 수 없는 내장 스케줄러를 교체하기, 그리고 작업이 예상대로 작동하지 않을 때 출력을 찾는 방법을 다룹니다.
KPanel에서 Cron의 위치
Cron은 사이트에 속하므로 메인 메뉴가 아닌 사이트에서 접근합니다:
- KPanel에 로그인한 후 왼쪽 사이드바에서 Websites를 클릭합니다.
- 원하는 사이트를 클릭합니다.
- 사이트의 메뉴에서 Advanced를 열고 Cron을 엽니다.
직접 주소는 /websites/<site-id>/cron입니다. 기존 작업 테이블이 표시되거나, 사이트에 작업이 없으면 빈 상태가 표시됩니다.

작업 추가
오른쪽 상단의 Add Cron Job을 클릭합니다. 폼에는 세 개의 필드가 있습니다.
일정
6개의 사전 설정 버튼이 표현식을 자동으로 채웁니다:
| 버튼 | 표현식 |
|---|---|
| 매분 | * * * * * |
| 5분마다 | */5 * * * * |
| 매시간 | 0 * * * * |
| 매일 오전 2시 | 0 2 * * * |
| 매주 일요일 | 0 2 * * 0 |
| 매월 1일 | 0 2 1 * * |
또는 Cron expression에 직접 입력합니다. 5개 필드의 순서는 분, 시간, 일, 월, 요일입니다:
minute hour day-of-month month day-of-week
0 3 * * *은 매일 오전 3시에 실행됩니다.*/15 * * * *은 15분마다 실행됩니다.0 9 * * 1은 매주 월요일 오전 9시에 실행됩니다.30 1 1 * *은 매월 1일 오전 1시 30분에 실행됩니다.0 */6 * * *은 6시간마다, 정시에 실행됩니다.
레이블
나중에 인식할 수 있는 이름(예: WordPress cron 또는 Nightly stock sync)입니다. 작업 테이블에 표시되므로 설명적으로 만드십시오: job 3은 오전 2시에 아무 도움이 되지 않습니다.
명령
실행할 셸 명령입니다. Save를 클릭하여 작업을 생성합니다.
전체 경로를 사용하세요. Cron은 최소한의 환경에서 실행되며 셸 프로필이 없으므로, SSH로 로그인할 때 작동하는 php 또는 상대 디렉터리는 여기서 조용히 실패합니다. 항상 전체 경로를 작성하세요.
명령 작성
작업은 사이트의 자체 시스템 사용자로 실행되므로 홈 디렉터리가 적절한 기준점이고 ~이 올바르게 해석됩니다. 사이트의 파일은 다음 위치에 있습니다:
~/htdocs/yourdomain.co.nz
사이트의 Files, SFTP 탭에서 정확한 경로를 확인할 수 있으며, Site files에 표시됩니다.
일반적인 명령:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
cd ~/htdocs/yourdomain.co.nz && /usr/bin/php bin/send-queued-emails.php
/usr/bin/curl -fsS https://yourdomain.co.nz/api/nightly-report
명령을 스케줄하기 전에 테스트하세요. wp 명령이면 사이트의 WordPress, Console 섹션에 붙여넣거나 SSH를 통해 실행하세요. 작동하지 않을 명령은 오전 3시 로그 파일보다 프롬프트에서 훨씬 쉽게 발견됩니다.
WordPress의 내장 스케줄러 교체
WordPress는 WP-Cron이라는 자체 의사 스케줄러와 함께 제공되며, 누군가 페이지를 로드할 때만 실행됩니다. 조용한 사이트에서는 예약된 게시물이 늦게 게시되고 이메일이 미발송 상태로 쌓입니다. 바쁜 사이트에서는 모든 방문자가 스케줄 확인 비용을 지불합니다.
실제 cron 작업이 이 문제를 해결합니다. KPanel이 전체 교체를 처리합니다:
- 사이트를 연 후 WordPress 탭을 엽니다.
- WP-Cron 섹션을 엽니다.
- Enable system cron을 클릭합니다.
이렇게 하면 5분마다 WP-Cron을 실행하는 스케줄이 추가되고 DISABLE_WP_CRON을 설정하여 페이지 로드가 더 이상 이를 트리거하지 않도록 합니다. 같은 화면의 Remove system cron이 두 부분을 모두 되돌립니다.
수동으로 수행하려면 두 단계입니다:
방문자가 트리거하는 버전을 비활성화하세요. Files, File Manager를 사용하여 wp-config.php에 /* That's all, stop editing! */ 줄 위에 다음을 추가합니다:
define( 'DISABLE_WP_CRON', true );
실제 작업을 추가하세요. Advanced, Cron에서:
- 일정:
*/5 * * * * - 레이블:
WordPress cron - 명령:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now
DISABLE_WP_CRON 부분을 건너뛰지 마세요. 둘 다 실행되면 모든 예약된 작업이 두 번 실행될 수 있습니다: 중복 이메일, 중복 주문 처리, 구독 플러그인의 중복 청구. WP-Cron 섹션의 한 번의 클릭 작업을 사용하면 이런 일이 발생하지 않습니다.
WooCommerce 및 백그라운드 큐
WooCommerce는 주문 상태 변경, 구독 갱신, 이메일 및 재고 업데이트를 위해 백그라운드 큐를 사용합니다. WP-Cron에 의존하므로 조용한 매장에서 정확히 이러한 작업부하로 인해 문제가 발생합니다.
실제 스케줄이 설정되면 큐는 5분마다 처리됩니다. wp-admin의 WooCommerce, Status, Scheduled Actions에서 모니터링할 수 있습니다.
대량 매장은 */2 * * * *로 이동할 수 있습니다. 그 이하로 내려가는 것은 거의 도움이 되지 않습니다: 작업을 수행하는 것보다 프로세스를 시작하는 데 더 많은 시간을 소비합니다. Setting Up WooCommerce를 참조하세요.
기존 작업 관리
작업 테이블에는 Label, Schedule, Command, Last run, Status가 표시되며, 각 행에 두 가지 작업이 있습니다:
- Disable은 작업을 삭제하지 않고 일시 중지하며, Enable으로 변경되어 다시 활성화할 수 있습니다. 작업이 문제를 일으키는지 여부를 테스트할 때 사용하세요.
- Delete는 영구적으로 제거합니다. 확인이 요청되며 예약된 실행은 즉시 중지됩니다.
Cron 작업 삭제는 실행 취소할 수 없습니다. 스케줄이 서버에서 즉시 제거됩니다. 일시적으로만 중지하려는 경우 Disable을 사용하세요.
출력 찾기
Kapsule이 생성하는 모든 작업의 출력은 캡처됩니다. 표준 출력과 오류는 사이트 사용자의 홈 디렉터리의 cron-logs 디렉터리에 있는 로그 파일에 추가되며, 작업당 하나의 파일입니다.
이 로그는 거의 모든 "작업이 실행되었나?" 질문의 답변입니다. 명령이 출력한 내용과 발생한 오류를 기록하기 때문입니다.
읽으려면 SSH를 통해 연결하고 ~/cron-logs/을(를) 확인하세요. SSH는 키 인증을 사용하므로 먼저 사이트의 Files, SSH Keys 탭에서 공개 키를 추가하세요: Adding SSH Keys를 참조하세요.
File Manager와 SFTP 계정은 사이트 디렉터리 ~/htdocs/yourdomain.co.nz로 제한되며, cron-logs은 한 수준 위에 있습니다. 이는 의도적입니다: SFTP 액세스 권한이 있는 계약자를 웹사이트 외의 모든 것에서 차단합니다. 로그에 접근하려면 네이티브 SSH를 사용하거나 아래와 같이 출력을 사이트 디렉터리로 리디렉션하세요.
File Manager가 열 수 있는 곳에 출력을 원한다면 직접 리디렉션하세요:
cd ~/htdocs/yourdomain.co.nz && /usr/bin/wp cron event run --due-now >> ~/htdocs/yourdomain.co.nz/wp-content/cron.log 2>&1
2>&1은 오류를 정상 출력과 동일한 파일로 보냅니다. 없으면 오류가 어디로도 가지 않습니다.
사이트 디렉터리 내의 모든 것은 잠재적으로 웹을 통해 요청될 수 있습니다. 리디렉션된 로그를 사이트 루트가 아닌 wp-content 아래에 두고, 아무도 추측할 수 없는 이름을 지정하고, 디버깅을 완료한 후 삭제하세요.
좋은 관행
- 일정을 엇갈리게 하세요. 6개 작업이 모두
0 2 * * *로 설정되면 모두 동시에 시작됩니다. 분산시키세요:0 2,10 2,20 2. - 진정으로 필요하지 않으면 매분을 사용하지 마세요.
*/5은 WordPress 및 WooCommerce를 포함하여 거의 모든 것에 충분합니다. - 작업을 짧게 유지하세요. 간격보다 오래 걸리는 작업은 다음 실행과 겹칩니다.
- 시끄러운 것을 출력으로 리디렉션하세요. 수다스러운 작업 하나가 디스크를 가득 채우지 않도록 합니다.
- 목록을 가끔 검토하세요. 제거한 플러그인에서 남겨진 작업은 계속 실행됩니다.
문제 해결
작업이 실행되지 않는 것 같습니다. 먼저 경로를 확인합니다. 로그 파일을 엽니다. 그러면 상태가 Active이고 Disabled이 아님을 확인합니다. 그 다음 SSH를 통해 같은 명령을 실행하고 무엇이라고 말하는지 확인합니다.
로그의 "command not found". 누락된 전체 경로입니다. 이름만 사용하는 대신 /usr/bin/php, /usr/bin/wp, /usr/bin/curl을(를) 사용합니다.
권한 거부. 작업은 사이트의 시스템 사용자로 실행됩니다. 해당 사용자는 명령이 건드리는 모든 것의 소유자이거나 최소한 읽을 수 있어야 합니다. Using the File Manager에서 권한을 확인합니다.
WordPress 작업이 여전히 늦게 실행됩니다. 교체의 두 부분이 모두 적용되었는지 확인합니다: Advanced, Cron에 스케줄이 있고 DISABLE_WP_CRON이(가) 설정되어 있습니다. WordPress 탭의 WP-Cron 섹션에 둘 다의 현재 상태가 표시됩니다.
작업이 실행 중이면 사이트가 느립니다. 조용한 시간으로 이동하거나 작업을 더 작은 배치로 나누세요. 사이트 수준 리소스 사용은 Performance 아래에 표시됩니다: Improving Website Speed를 참조하세요.
플러그인 업데이트 후 작업이 작동을 멈췄습니다. 명령 경로가 변경되었을 수 있습니다. 로그를 확인한 후 작업 테이블에서 이전 작업을 삭제하고 수정된 작업을 추가하여 명령을 업데이트합니다.