مقاله

تعریف schedule در routes/console.php، cron سرور، withoutOverlapping و taskهای روزانه production.

Scheduled Tasks در Laravel — Task Scheduling و Cron

Scheduled Tasks در Laravel — Task Scheduling و Cron

Cron سرور هر شب backup می‌گیرد — اما پنج اسکریپت پراکنده با مسیر اشتباه. Laravel Scheduler یک entry cron دارد: schedule:run هر دقیقه — بقیه در کد PHP در routes/console.php تعریف می‌شود. تمیز، version control و testable.

تعریف schedule

use Illuminate\Support\Facades\Schedule;

Schedule::command('inspire')->hourly();

Schedule::call(function () {
    DB::table('sessions')->where('last_activity', '<', now()->subDays(7)->timestamp)->delete();
})->daily();

Schedule::job(new PruneOldExports)->weekly();

فرکانس‌های رایج

everyMinute، hourly، dailyAt('02:00')، weeklyOn(1, '8:00')، monthly، cron('0 */6 * * *').

جلوگیری از هم‌پوشانی

Schedule::command('reports:generate')
    ->dailyAt('01:00')
    ->withoutOverlapping(60);

اگر اجرای قبلی هنوز تمام نشده، skip — برای job طولانی حیاتی.

یک سرور در cluster

Schedule::command('backup:run')->daily()->onOneServer();

نیاز cache redis برای lock — Redis.

Cron روی سرور

* * * * * cd /var/www/app && php artisan schedule:run >> /dev/null 2>&1

فقط این یک خط — Laravel بقیه را مدیریت می‌کند.

لیست و تست

php artisan schedule:list
php artisan schedule:test
php artisan schedule:work  # local — هر دقیقه اجرا

مثال‌های production

  • پاکسازی failed_jobs — failed jobs
  • sitemap generate — RSS این پورتفولیو
  • backup database
  • expire subscription
  • queue:prune-batches

تفاوت Schedule و Queue

Schedule زمان ثابت؛ Queue event-driven. گاهی schedule یک job dispatch می‌کند — ترکیب درست.

timezone

Scheduler از config/app.php timezone — Asia/Tehran برای ایران.

جمع‌بندی

یک cron + routes/console.php = مرکز زمان‌بندی. Queue: مقدمه. Deploy: مقالات DevOps بعدی.

اتوماسیون سرور