Task Scheduler

codeigniter4/tasks — 클로저·커맨드·셸 스케줄 등록 및 수동 실행

운영 방법: cron에 * * * * * cd /path && php spark tasks:run >> /dev/null 2>&1을 등록하면 매분 실행되어 스케줄에 맞는 태스크가 자동으로 처리됩니다. 아래 ▶ 실행 버튼으로 태스크를 즉시 수동 실행할 수 있습니다.
등록된 태스크 (5개) 현재 시각:
이름 타입 액션 스케줄 Cron 표현식 지금 실행?
health-check 클로저 클로저 함수 매분 * * * * * ✓ 대기 중
queue-monitor 클로저 클로저 함수 5분마다 */5 * * * *
cache-clear Spark커맨드 spark cache:clear 00 * * * * 00 * * * *
daily-stats 클로저 클로저 함수 매일 자정 0 0 * * *
playground-reset Spark커맨드 spark playground:reset --db-only --quiet 00 3 * * * 00 3 * * *
실행 결과
태스크 실행 버튼을 클릭하면 결과가 여기에 표시됩니다.
php spark tasks:list 출력 예시
+------------------+---------+---------------+--------------+
| Task             | Type    | Expression    | Next Run     |
+------------------+---------+---------------+--------------+
| health-check     | closure | * * * * *     | (every min)  |
| queue-monitor    | closure | */5 * * * *   | (every 5min) |
| cache-clear      | command | 0 * * * *     | (every hour) |
| daily-stats      | closure | 0 0 * * *     | (midnight)   |
| playground-reset | command | 0 3 * * *     | (3am daily)  |
+------------------+---------+---------------+--------------+
태스크 유형과 스케줄 메서드
클로저 closure
PHP 익명 함수를 직접 실행. 간단한 로직에 적합.
Spark 커맨드 command
php spark {name} 형태의 CLI 커맨드 실행.
셸 커맨드 shell
운영체제 셸 명령 실행. cp, rm 등 시스템 명령.
URL 호출 url
HTTP GET으로 지정 URL 호출. 웹훅·핑 용도.
큐 잡 푸시 queue
codeigniter4/queue 잡을 스케줄에 맞춰 자동 push.
app/Config/Tasks.php
<?php

namespace Config;

use CodeIgniter\Tasks\Config\Tasks as BaseTasks;
use CodeIgniter\Tasks\Scheduler;

class Tasks extends BaseTasks
{
    public bool $logPerformance = false; // true 시 settings 테이블 필요
    public int  $maxLogsPerTask  = 20;

    public function init(Scheduler $schedule): void
    {
        // ① 클로저 태스크 — 매분 실행
        $schedule->call(static function () {
            $db     = \Config\Database::connect();
            $tables = count($db->listTables());
            log_message('info', "[Task] 테이블 {$tables}개 정상");
            return "DB 연결 정상 · 테이블 {$tables}개";
        })->everyMinute()->named('health-check');

        // ② 클로저 태스크 — 5분마다
        $schedule->call(static function () {
            $db      = \Config\Database::connect();
            $pending = $db->table('queue_jobs')->where('status', 0)->countAllResults();
            return "대기 잡 {$pending}개";
        })->everyFiveMinutes()->named('queue-monitor');

        // ③ Spark 커맨드 — 매시간
        $schedule->command('cache:clear')->hourly()->named('cache-clear');

        // ④ 클로저 태스크 — 매일 자정
        $schedule->call(static function () {
            $posts = \Config\Database::connect()->table('posts')->countAllResults();
            log_message('info', "[Task] 게시글 {$posts}개");
        })->daily()->named('daily-stats');

        // ⑤ 커맨드 + 환경 제한 — 매일 새벽 3시, production만
        $schedule->command('playground:reset --db-only --quiet')
            ->daily('3:00 am')
            ->environments('production')  // production 환경에서만 실행
            ->named('playground-reset');
    }
}
주요 스케줄 메서드
메서드Cron설명
everyMinute() * * * * * 매분
everyFiveMinutes() */5 * * * * 5분마다
everyFifteenMinutes() */15 * * * * 15분마다
hourly() 0 * * * * 매시간 정각
daily() 0 0 * * * 매일 자정
daily('3:00 am') 0 3 * * * 매일 새벽 3시
weekdays() 0 0 * * 1-5 평일 자정
mondays() 0 0 * * 1 매주 월요일
monthly() 0 0 1 * * 매월 1일
cron('*/10 * * * *') */10 * * * * 커스텀 표현식
고급 옵션
옵션설명
->named('name') 태스크 이름 지정. tasks:run --task=name 으로 단독 실행 가능
->environments('production') 특정 CI_ENVIRONMENT에서만 실행
->singleInstance() 동시 실행 방지 (잠금 파일 사용)
->singleInstance(1800) TTL 1800초 잠금

특정 태스크만 실행

# 이름으로 단독 실행
php spark tasks:run --task=health-check

# 등록된 태스크 목록 조회
php spark tasks:list

# 태스크 실행 일시 중지 / 재개
php spark tasks:disable
php spark tasks:enable
Task Scheduler는 cron이 매분 php spark tasks:run을 실행해야 스케줄대로 동작합니다. 아래 한 줄만 등록하면 됩니다.
1. crontab 등록
# crontab 편집
crontab -e

# 아래 한 줄 추가
* * * * * cd /var/www/playground && php spark tasks:run >> /dev/null 2>&1

웹 서버 사용자(www-data)로 등록하려면:

sudo crontab -u www-data -e
2. 실행 로그 확인
# CI4 로그 파일 실시간 확인
tail -f writable/logs/log-2026-06-15.log

# tasks:run 결과만 필터링
grep "\[Task\]" writable/logs/log-2026-06-15.log

logPerformance = true로 설정하면 DB에 실행 시간·출력을 저장합니다. (codeigniter4/settings 마이그레이션 필요)

전체 실행 흐름
cron (매분)
spark tasks:run
Config/Tasks.php
shouldRun() 체크
task->run()
log_message()