stylers/laravel-task-manager

This package is a workaround for run tasks without artisan because proc_open & proc_close PHP modules disabled some server such as shared hosts.

6.0.0 2024-01-03 15:35 UTC

This package is auto-updated.

Last update: 2024-04-03 16:10:13 UTC


README

Latest Stable Version Total Downloads License Tests codecov Maintainability

Laravel version compatibility

Laravel version Package version
5.7 1.0
6.0 2.0
7.0 3.0
8.0 4.0
9.0 5.0
10.0 6.0

Requirements

  • PHP >= 8.0
  • Laravel >= 9.x

Installation

composer require stylers/laravel-task-manager

How to Test

docker run -it --rm -v $PWD:/app -w /app composer sh
composer install
./vendor/bin/phpunit

Usage

TaskTimer trait is using Laravel's Schedule Frequency Options

  1. Add Interface and Trait to class implementation and add handle method for a command entrypoint
use Illuminate\Console\Command;
use Stylers\TaskManager\Contracts\TaskTimerInterface;
use Stylers\TaskManager\Traits\TaskTimer;

class CommandTask extends Command implements TaskTimerInterface
{
    use TaskTimer;

    public function handle()
    {
        //
    }
}
  1. Add CommandTask to TaskManager
use Illuminate\Support\ServiceProvider;
use Stylers\TaskManager\Console\TaskManager;
use Stylers\TaskManager\Tests\Fixtures\CommandTask;

class ScheduleServiceProvider extends ServiceProvider
{
    public function boot()
    {
        parent::boot();

        $this->app->booted(function () {
            $scheduler = app(TaskManager::class);
                        
            // Single task adding
            $scheduler->addTasks(
                (new CommandTask())->dailyAt('6:00')
            );
            
            // ---- OR ----

            // Multiple task adding in same time
            $scheduler->bulkAddTasks([
                (new CommandTask())->dailyAt('6:00'),
                (new CommandTask())->weekly(),
            ]);
        });
    }
}
  1. In example called in web.php
    (please feel free to add security checks for endpoint)
use Stylers\TaskManager\Console\TaskManager;
use Illuminate\Support\Facades\Route;

Route::get('/cron', static function () {
    TaskManager::run();
});
  1. Set cron to call this endpoint
* * * * * curl -s -X GET -L domain/cron >>/var/log/cron.log 2>&1

Special thanks to: