Wraps a Laravel schedule to it own schedule service that will:

  • Log all output to /proc/1/fd/2 if LOG_CHANNEL is set to stterr or docker environment is set
  • Allow scheduling command in queue (differently than Laravel does)
    • Ensure it is unique and prevents overlapping (uses AbstractUniqueLongJob)
    • Logs (Running command) when command started and how long it took.
    • Logs (Command finished) command failure with duration and message.


  • To register schedule extend AbstractServiceProvider and select contract to implement
    • HasSchedule (registers schedule on all environments)
    • HasScheduleOnProduction (registers schedule only on production environment)
  • Use queueCommand




namespace App\Confirmations;

use App\Confirmations\Commands\ExpireConfirmationsCommand;
use Illuminate\Contracts\Container\BindingResolutionException;
use LaraStrict\Console\Contracts\ScheduleServiceContract;
use LaraStrict\Providers\AbstractServiceProvider;
use LaraStrict\Console\Contracts\HasSchedule;

class ConfirmationsServiceProvider extends AbstractServiceProvider implements HasSchedule
    public function register(): void


     * @throws BindingResolutionException
    public function schedule(ScheduleServiceContract $schedule): void

Extending / changing schedule logic

Register your implementation in your AppServiceProvider. Ensure that AppServiceProvider is before any service provider that uses AbstractServiceProvider in config/app.php

$this->app->alias(MyScheduleServiceService::class, ScheduleServiceContract::class);
Edit this page on GitHub Updated at Fri, Mar 8, 2024