# Schedule

Source: https://laraport.app/docs/schedule/

> The Laravel app's scheduled tasks in the terminal, soonest first, with their next run, and running one now through schedule:test after a confirmation.

**Schedule** on the Laravel tab lists the tasks from the app's scheduler as a table, soonest first:

| Column | Shows |
|---|---|
| in | Time until the next run: `now`, `45s`, `12m`, `3h 20m` |
| next run | Date and time of the next run |
| expression | The cron expression |
| task | The command or job, or the description you gave it |
| flags | `no overlap`, `one server`, `background`, `in maintenance`: the task's `withoutOverlapping()`, `onOneServer()`, `runInBackground()` and `evenInMaintenanceMode()` |
| timezone | The task's timezone |

The tasks are read from the booted app, so they match what `schedule:run` would do on that server.

## Keys

| Key | Action |
|---|---|
| `enter` | The task in full |
| `t` | Run the task now |
| `r` | Read the schedule again. The cursor stays on its row |

## Running a task now

`t` runs the task under the cursor once, the way the scheduler runs it, with:

```bash
php artisan schedule:test --no-interaction --name='<task>'
```

A confirmation shows the exact command first. The output streams live, and the task's schedule does not change.

The task is found by its name: a command by its command line without `php artisan`, an `exec` task by its command, a job or closure by its description. So:

- a closure or job without a `->description()` cannot be run from here. The screen asks you to give it one;
- two tasks with the same name are refused, since `schedule:test` cannot tell them apart. Give one of them a `->description()`.

`schedule:test --name` needs Laravel 9 or newer. Before that, artisan refuses the option, so nothing runs by mistake.
