Schedulers

The Scheduler tab manages Laravel scheduled commands at the project level — the schedule you define in your application's code. Depfloy registers a single cron entry for each Laravel project that invokes schedule:run once a minute, and Laravel itself decides which of your scheduled commands to run from there.

Open it from the project’s tab strip in the Console.

What you see #

The Scheduler tab lists the scheduled commands Depfloy has detected in your project, with for each one:

  • The command name or description
  • Its frequency (every minute, hourly, daily, weekly, or a custom cron expression)
  • Whether it’s currently enabled
  • The last time it ran and what happened

Click any entry to see its recent run history.

Server-level vs project-level #

There are two places to schedule things in Depfloy. Pick the right one:

  • Project-level Schedulers (this page) — for Laravel scheduled commands defined in your application’s code. The schedule is part of the project; if you deploy the project to a different server, the schedules move with it. Use this for application-level work: cleaning up records, sending digest emails, generating reports.
  • Server-level Scheduled Tasks — for OS-level commands, scripts that touch multiple projects, or anything not tied to a Laravel application. Use this for housekeeping: apt-get update, system backups, monitoring scripts.

Pause and resume #

If you need to temporarily stop a scheduled command (running an investigation, doing a controlled migration), pause it from the Scheduler tab. Paused entries skip their next runs until you resume them. The schedule is still defined in your code; only Depfloy’s execution is paused.

Watch a task with a heartbeat #

Pausing aside, a scheduled task can also stop running for reasons nothing on this tab would show — the machine’s cron daemon stopped, or the command started failing. Pick Turn on heartbeat from a task’s menu and Depfloy watches it: the task reports when it starts and how it ended, and you are notified when a report is late or says the run failed.

How often a report is expected is read from the task’s own schedule, so there is nothing to keep in sync. @reboot tasks have no heartbeat option — they fire on an event rather than an interval, so no report is ever late.

See Uptime Monitoring.

Why a command didn’t run #

A few common reasons a Laravel scheduled command appears not to run:

  • It’s paused (check the entry’s status)
  • Your project’s cron entry isn’t set up — check that * * * * * cd /home/depfloy/PROJECT_ID/current && php artisan schedule:run >> /dev/null 2>&1 is in the depfloy user’s crontab
  • The command’s when() / unless() condition is not satisfied
  • An earlier scheduled command failed silently and is blocking the queue

For deep debugging, use the Logs tab to see your application’s output, or Commands to run php artisan schedule:list and php artisan schedule:test manually.