크론 및 CLI 스크립트
의사 크론(pseudo-cron) 스케줄러와 고급 호스팅 환경을 위한 선택적 명령줄 스크립트를 다룹니다.
TubePress는 순위 재계산, 트랜스코드 작업 폴링, 피드 가져오기, 사이트맵 갱신 등의 반복 작업을 시스템 crontab을 설정하지 않아도 실행합니다. 이 페이지에서는 pseudo-cron, 이를 유지하는 하트비트, 그리고 고급 호스트를 위한 선택적 명령줄 스크립트를 설명합니다.
Pseudo-cron
CronManager는 WordPress 스타일의 스케줄러입니다. 작업은 이름과 간격으로 등록되며, CronManager::run()은 모든 페이지 렌더링 끝에 한 번 호출됩니다. 각 작업은 마지막 실행 이후 충분한 시간이 경과한 경우에만 실행됩니다.
// Register a task (typically from a plugin's boot() method)
CronManager::register('promo_refresh', 600, function () {
Promo::rebuildCache(); // runs at most every 10 minutes
});어떤 호스트에서도 안전하게 작동하도록 설계되었습니다:
- 원자적 잠금.
settings테이블에 대한 조건부UPDATE로 각 실행을 선점하므로, 두 개의 동시 요청이 동일한 작업을 두 번 실행하는 일이 없습니다. - 영속적 타임스탬프. 마지막 실행 시간은
settings에 (autoload = 0으로) 저장되므로, 재시작이나 충돌 후에도 스케줄이 유지됩니다 — 다음 페이지 로드 시 중단된 지점부터 재개됩니다. - 자동 백오프. 계속 오류를 발생시키는 작업은 복구될 때까지 지수적으로 증가하는 간격(최대 1시간)으로 재시도되며, 성공 시 실패 카운터가 초기화됩니다.
하트비트 — crontab 불필요
pseudo-cron은 페이지가 렌더링될 때만 실행되므로, 신규 또는 저트래픽 사이트에서는 문제가 될 수 있습니다. TubePress는 자체 관리 하트비트로 이를 해결합니다: 방문자가 없어도 약 50초마다 홈 페이지를 핑하는 경량 CLI 프로세스(bin/heartbeat.php)로 스케줄러가 계속 작동하도록 합니다.
- PID 보호가 적용되며 종료 시 웹 요청에 의해 자동으로 재시작됩니다 — 직접 시작하거나 감시할 필요가 없습니다.
heartbeat_enabled를0으로 설정하면 런타임에 비활성화할 수 있습니다.
crontab -e, 슈퍼바이저, 추가 서비스 관리가 필요 없습니다.스케줄러에서 실행되는 작업
코어와 번들 플러그인은 자체 작업을 등록합니다 — 예를 들어 CTR 점수 재계산, 트랜스코드 작업 디스패치 및 재시도, 피드 가져오기, 카탈로그 처리, AI 번역 작업 및 사이트맵 갱신. 서브시스템을 활성화하면 작업이 자동으로 추가됩니다; 별도로 연결할 필요가 없습니다.
선택적 CLI 스크립트
무거운 작업이나 일회성 작업을 위해 bin/에 몇 가지 명령줄 스크립트가 제공되며, 수동으로 또는 지원 가능한 호스트의 실제 crontab에서 실행할 수 있습니다. 카탈로그 다운로드 및 대량 삭제를 위한 장시간 실행 워커와 유지보수 헬퍼가 포함되어 있습니다. 프로젝트 루트에서 시스템 PHP CLI로 실행하세요:
php bin/heartbeat.php # run the heartbeat in the foreground
php bin/catalogue-worker.php # process catalogue download jobs실제 crontab 사용 (고급)
운영 체제에서 스케줄러를 직접 제어하려는 경우 — 예를 들어 정밀하고 예측 가능한 타이밍이 필요한 고트래픽 사이트의 경우 — 하트비트를 비활성화하고 짧은 간격으로 홈 페이지를 요청(또는 하트비트를 한 번 실행)하는 단일 시스템 cron 항목을 추가할 수 있습니다. 대부분의 운영자는 이 기능이 필요 없습니다; 기본 제공 하트비트로 충분합니다.