本文へ移動
cccskills
無料GitHub で公開

laravel-scheduling

Use when configuring Laravel task scheduling — cron expressions, frequency helpers, overlap prevention, maintenance mode, or output handling.

インストール方法を見る

含まれるファイル(1)

  • SKILL.md5.8 KB

SKILL.md(原文)

インストールする前に、エージェントに与えられる指示の中身を確認できます。

laravel-scheduling

When to use

Use this skill when scheduling recurring tasks:

  • Artisan command scheduling
  • Job dispatching on a schedule
  • Closure-based scheduled tasks
  • Overlap prevention and maintenance mode handling

Procedure: Create a scheduled task

  1. Inspect existing schedule — Read routes/console.php (Laravel 11+) or app/Console/Kernel.php to identify current cadence, overlap-prevention patterns, and output handling.
  2. Pick frequency and concurrency policy — Choose a frequency helper (see table) or a cron expression; decide whether withoutOverlapping() / onOneServer() is required.
  3. Register the task — Add the Schedule::command(...) / Schedule::job(...) entry; wire log destinations and runInBackground() if needed.
  4. Verify — Run php artisan schedule:test (or schedule:list) and confirm timing, output path, and overlap behavior.

In routes/console.php (Laravel 11+)

use Illuminate\Support\Facades\Schedule;

Schedule::command('reports:generate')->dailyAt('06:00');
Schedule::command('telescope:prune --hours=48')->daily();
Schedule::command('queue:prune-batches --hours=48')->daily();
Schedule::job(new CleanupTemporaryFiles())->hourly();

Frequency helpers

MethodSchedule
->everyMinute()Every minute
->everyFiveMinutes()Every 5 minutes
->everyFifteenMinutes()Every 15 minutes
->hourly()Every hour
->hourlyAt(17)Every hour at :17
->daily()Daily at midnight
->dailyAt('13:00')Daily at 1 PM
->twiceDaily(1, 13)Daily at 1 AM and 1 PM
->weekly()Weekly on Sunday at midnight
->weeklyOn(1, '8:00')Weekly on Monday at 8 AM
->monthly()Monthly on the 1st at midnight
->monthlyOn(4, '15:00')Monthly on the 4th at 3 PM
->quarterly()Quarterly
->yearly()Yearly

Cron expressions

Schedule::command('reports:generate')->cron('0 6 * * 1-5'); // Weekdays at 6 AM

Overlap prevention

// Prevent overlapping — skip if previous instance is still running
Schedule::command('import:customers')->hourly()->withoutOverlapping();

// With custom expiration (minutes)
Schedule::command('import:customers')->hourly()->withoutOverlapping(30);

Conditional scheduling

// Only in production
Schedule::command('reports:send')->daily()->environments(['production']);

// Custom condition
Schedule::command('sync:data')->hourly()->when(function () {
    return Config::boolean('services.sync.enabled');
});

// Skip condition
Schedule::command('emails:send')->daily()->skip(function () {
    return app()->isDownForMaintenance();
});

Output handling

// Log output to file
Schedule::command('reports:generate')
    ->daily()
    ->appendOutputTo(storage_path('logs/reports.log'));

// Email output on failure
Schedule::command('import:data')
    ->daily()
    ->emailOutputOnFailure('admin@example.com');

Maintenance mode

// Run even during maintenance mode
Schedule::command('queue:work')->everyMinute()->evenInMaintenanceMode();

Running the scheduler

# The scheduler itself runs every minute via system cron.
# cron has no working directory to inherit, and artisan takes no directory
# flag, so the `cd` is the shape here rather than a habit worth replacing.
* * * * * cd /path-to-project && php artisan schedule:run >> /dev/null 2>&1

# Test locally
php artisan schedule:work   # Runs scheduler in foreground
php artisan schedule:list   # Show all scheduled tasks
php artisan schedule:test   # Run a specific task interactively

Grouped schedules

// routes/console.php — include schedule groups
Schedule::group('reports.php');
Schedule::group('imports.php');

// routes/console/reports.php
Schedule::command('reports:daily')->dailyAt('06:00');
Schedule::command('reports:weekly')->weeklyOn(1, '07:00');

Core rules

  • Always use withoutOverlapping() for long-running tasks.
  • Use environments() to restrict production-only tasks.
  • Log output for debugging — use appendOutputTo().
  • Group related schedules in separate files under routes/console/.
  • Monitor failures — use emailOutputOnFailure() or Horizon for queued jobs.
  • One cron entry — only schedule:run goes in crontab, everything else in Laravel.

Output format

  1. Schedule definition in console kernel or schedule method
  2. Overlap prevention and maintenance mode configuration

Auto-trigger keywords

  • schedule
  • cron
  • scheduled task
  • recurring job
  • schedule:run
  • withoutOverlapping

Validate

  • Verify schedule runs correctly: php artisan schedule:list shows the task.
  • Confirm withoutOverlapping() is set for long-running tasks.
  • Check that maintenance mode handling is configured if needed (evenInMaintenanceMode()).

Gotcha

  • withoutOverlapping() uses cache locks — if the cache is cleared, overlapping can still happen.
  • The model forgets runInBackground() for long-running tasks — without it, one task blocks the next.
  • Don't schedule tasks every minute unless absolutely necessary — it wastes server resources.

Do NOT

  • Do NOT add multiple cron entries — use Laravel's scheduler for everything.
  • Do NOT schedule heavy work directly — dispatch a queued job instead.
  • Do NOT forget withoutOverlapping() for tasks that may run longer than their interval.
  • Do NOT hardcode times — use environment-based config when schedules vary per environment.

レビュー

まだレビューはありません。使ってみた感想をお寄せください。

同じリポジトリのスキル

概要と使いどころ

Use when reviewing UI for accessibility — WCAG 2.2 AA, keyboard nav, focus, ARIA, contrast, screen-reader semantics — even on 'is this a11y-OK?' or 'mach das barrierefrei'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

Use when defining or auditing the activation event — aha-moment selection, retention correlation, falsifiable definition. Triggers on 'what is our aha moment', 'redefine activation'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

Use when capturing an architectural decision — file naming, next ADR number, Status / Context / Decision / Consequences, index regen; fires even without saying 'ADR'.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

Adversarial critique — devil's advocate, stress-test, honest teardown ('poke holes', 'be brutal', 'was hältst du davon'); explicit request only. Routine code or design review → code-review.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

Use when reading, creating, or updating agent documentation, module docs, roadmaps, or AGENTS.md. Understands the full .augment/, agents/, and copilot-instructions structure.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

Use for an adversarial red-team / blue-team / auditor review of an AI agent's CONFIG + behaviour (rules, skills, MCP, hooks, permissions) — attack-chain → defensive-gap list, not a code audit.

日本語の概要は準備中です。原文の説明を表示しています。

event4u-app/agent-config112026年10月13日 更新

event4u-app のスキルをすべて見る

このスキルの問題を報告する