Installation
composer require aboutcoders/process-control
Register the service provider in config/app.php:
Aboutcoders\ProcessControl\ProcessControlServiceProvider::class,
Basic Usage Define a process in a Laravel command:
use Aboutcoders\ProcessControl\ProcessControl;
class ExampleProcess extends Command
{
protected $signature = 'process:example';
protected $description = 'Run a controlled process';
public function handle(ProcessControl $processControl)
{
$process = $processControl->create('example-process')
->setCommand('php artisan some:task')
->setTimeout(3600) // 1 hour
->setMaxRetries(3)
->run();
}
}
First Use Case
ProcessControl facade or API endpoints (if exposed).Define the Process
$process = $processControl->create('data-export')
->setCommand('php artisan export:data')
->setEnvironment(['APP_ENV=production'])
->setWorkingDirectory(storage_path('app'));
Execute & Monitor
$process->run(); // Runs asynchronously
$status = $process->status(); // 'pending', 'running', 'completed', 'failed'
$output = $process->output(); // Logs/results
Retry Logic
$process->setMaxRetries(3)
->setRetryDelay(60) // seconds
->run();
Event Listeners
Bind to process events (e.g., ProcessStarted, ProcessFailed):
ProcessControl::listen('ProcessFailed', function ($process) {
Log::error("Process {$process->id} failed", $process->output());
});
queue:work for distributed processing.
$process->queueOn('high-priority'); // Uses Laravel's queue system
public function getProcessStatus($id)
{
return ProcessControl::find($id)->status();
}
ProcessControl in scheduled tasks (app/Console/Kernel.php):
$schedule->command('process:example')->hourly();
Process Isolation
app() or Eloquent directly in the command.--option or environment variables.Timeout Handling
->setTimeout(300) // 5 minutes
Logging Overhead
--quiet in commands or filter output:
->setCommand('php artisan task --quiet')
Database Locks
php artisan process:list
$process->output(); // Raw logs
$process->errorOutput(); // Stderr
$process->terminate(); // Force-stop
Custom Process Storage Override the default storage (e.g., switch to Redis):
ProcessControl::setStorage(new RedisProcessStorage());
Pre/Post Hooks
Extend the Process model to add custom logic:
class CustomProcess extends Process
{
protected static function booted()
{
static::created(function ($process) {
// Send Slack notification
});
}
}
Docker/Kubernetes
For containerized environments, use setContainer() to specify Docker commands:
->setCommand('docker run my-image')
->setContainer(true)
How can I help you explore Laravel packages today?