Laravel Database Schedule

robersonfaria/laravel-database-schedule image

Laravel Database Schedule stats

Downloads
45K
Stars
304
Open Issues
9
Forks
47

View on GitHub →

Manage your Laravel Task Scheduling in a friendly interface and save schedules to the database.

Documentation

This librarian creates a route(default: /schedule) in your application where it is possible to manage which schedules will be executed at any given moment, these schedules are recorded in the database and can be changed, activated, inactivated or deleted via the interface without the need for a new application deployment.

Installation

  1. Run composer require robersonfaria/laravel-database-schedule
  2. Run php artisan migrate

Environment variables

You can set the following environment variables to configure schedules:

  • SCHEDULE_TIMEZONE : The default is the same configured for the application, but if you need the schedules to run in a different timezone, it is possible to configure it with this variable
  • SCHEDULE_CACHE_DRIVER : The default is file
  • SCHEDULE_CACHE_ENABLE : The default is disabled when APP_DEBUG=true and enabled when APP_DEBUG=false

Configurations

There are several library configuration options, to change the settings you can get the configuration file for your project

php artisan vendor:publish --provider="RobersonFaria\DatabaseSchedule\DatabaseSchedulingServiceProvider" --tag="config"

Dashboard Authorization

Dashboard Authorization exposes a dashboard at /schedule URI.

In the configuration file it is possible to define whether to restrict access to route /schedule, the default is true. If access is restricted, the user must be logged in and meet the requirements defined in the viewDatabaseSchedule gate controls access.

<?php
return [
//...
/**
* If restricted_access is true, the user must be authenticated and meet the definition of `viewDatabaseSchedule` gate
*/
'restricted_access' => env('SCHEDULE_RESTRICTED_ACCESS', true),
//...
]

Note that this value can also be changed using the SCHEDULE_RESTRICTED_ACCESS environment variable.

ATTENTION: if restricted_access is set to false, access to the / schedule route will be public.

You must define the gates in your service providers, laravel by default already brings the provider App\Providers\AuthServiceProvider for this purpose. See more in the Laravel documentation https://laravel.com/docs/8.x/authorization#gates

You are free to modify this gate as needed to restrict access to your Database Schedule Dashboard.

protected function gate()
{
Gate::define('viewDatabaseSchedule', function ($user) {
return in_array($user->email, [
'roberson.faria@gmail.com',
]);
});
}

Examples:

If you want to limit access to a route to users who have a certain role, you can do so.

Gate::define('viewDatabaseSchedule', function ($user) {
return $user->hasRole('administrator');
});

Basically, if your gate has return true access will be allowed, if return false access will be restricted.

Groups:

If you have a lot of jobs, you can make managing them easier by enabling the groups feature in config/database-schedule.php:

/**
* If you have a lot of jobs, you can group them for easier managing of jobs.
*/
'enable_groups' => true,

This will allow you to filter in the job listing only the jobs belonging to a certain group.

Scheduled Task Example

Create the command for your scheduled task app/Console/Commands/test.php:

<?php
 
namespace App\Console\Commands;
 
use Illuminate\Console\Command;
 
class test extends Command
{
/**
* The name and signature of the console command.
*
* @var string
*/
protected $signature = 'command:test {user} {initialDate} {finalDate}';
 
/**
* The console command description.
*
* @var string
*/
protected $description = 'Command description';
 
/**
* Create a new command instance.
*
* @return void
*/
public function __construct()
{
parent::__construct();
}
 
/**
* Execute the console command.
*
* @return int
*/
public function handle()
{
$this->info('Hello ' . $this->argument('user'));
$this->info("Initial Date: " . $this->argument('initialDate'));
$this->info("Final Date: " . $this->argument('finalDate'));
return 0;
}
}

Access the dashboard and the command will be listed for scheduling, create a schedule like the example below:

Run the artisan command to run scheduled tasks

php artisan schedule:run

The console output will look like this

Running scheduled command: ('/usr/bin/php7.4' 'artisan' command:test 1 '2022-02-02 00:00:00' '2022-04-02 00:00:00' > 'path/to/storage/logs/schedule-8763d2ce5a20ee888dd9d8a7e5a5cfcd4b315375.log' 2>&1 ;

If you marked the sending of the output by email you will receive an email similar to this one:

Schedule List

You can also list registered and active commands using artisan command:

$ php artisan schedule:list
 
+----------------------------------------------------------------------------------------+-----------+-------------+----------------------------+
| Command | Interval | Description | Next Due |
+----------------------------------------------------------------------------------------+-----------+-------------+----------------------------+
| '/usr/bin/php7.4' 'artisan' inspire | * * * * * | | 2022-03-02 17:05:00 +00:00 |
| '/usr/bin/php7.4' 'artisan' command:test 1 '2022-02-02 00:00:00' '2022-04-02 00:00:00' | * * * * * | | 2022-03-02 17:05:00 +00:00 |
+----------------------------------------------------------------------------------------+-----------+-------------+----------------------------+

CHANGELOG

CHANGELOG.md

Credits

Cube

Laravel Newsletter

Join 40k+ other developers and never miss out on new tips, tutorials, and more.


Robersonfaria Laravel Database Schedule Related Articles

Yammi Audit Log: Track Who Really Made a Change Across Jobs and Queues image

Yammi Audit Log: Track Who Really Made a Change Across Jobs and Queues

Read article
Monitor and Control Schedules, Queues, and Errors in Laravel with Watchtower image

Monitor and Control Schedules, Queues, and Errors in Laravel with Watchtower

Read article
NationForge: A Self-Hosted Admin Panel for Civic Organizations image

NationForge: A Self-Hosted Admin Panel for Civic Organizations

Read article
Monitor Laravel Queues, Commands, and Schedulers on Any Driver with Vigilance image

Monitor Laravel Queues, Commands, and Schedulers on Any Driver with Vigilance

Read article
LaraOwl: Self-Hosted Monitoring for Laravel Applications image

LaraOwl: Self-Hosted Monitoring for Laravel Applications

Read article
Subscriptionify: Feature-Based Subscription Management for Laravel image

Subscriptionify: Feature-Based Subscription Management for Laravel

Read article
DreamzTech logo

DreamzTech

Hire 6-10+ Yrs. experienced skilled Laravel Developers from DreamzTech. We ensure NDA protected, 100% quality delivery. Contact Us & Discuss Your Need.

DreamzTech
Harpoon: Next generation time tracking and invoicing logo

Harpoon: Next generation time tracking and invoicing

The next generation time-tracking and billing software that helps your agency plan and forecast a profitable future.

Harpoon: Next generation time tracking and invoicing
Statamic logo

Statamic

The drop-in ready Laravel CMS you’re been waiting for. Go full-stack or headless, flat file or database – it’s up to you.

Statamic
Securing Laravel logo

Securing Laravel

The essential security resource for Laravel devs, covering everything you need to keep your apps secure. Sign up to receive weekly security tips and monthly in depth articles, diving deep into security concepts you need to know!

Securing Laravel
No Compromises logo

No Compromises

Joel and Aaron, the two seasoned devs from the No Compromises podcast, are now available to hire for your Laravel project. ⬧ Flat rate of $9500/mo. ⬧ No lengthy sales process. ⬧ No contracts. ⬧ 100% money back guarantee.

No Compromises
Typesense Search logo

Typesense Search

Typesense is an open source, blazing-fast search engine, optimized for helping you build delightful search experiences for your sites and apps. Natively integrated with Laravel Scout.

Typesense Search