hugsbrugs / php-tasks
PHP Tasks Utilities
Requires
- hugsbrugs/php-database: dev-master
- hugsbrugs/php-scripts: dev-master
- monolog/monolog: ^1.19
- react/event-loop: ^0.4
This package is auto-updated.
Last update: 2024-10-24 21:11:55 UTC
README
This librairy provides utilities function to manage tasks processing
Install
Install package with composer
composer require hugsbrugs/php-tasks
In your PHP code, load library
require_once __DIR__ . '/../vendor/autoload.php'; use Hug\Tasks\Tasks as Tasks;
Edit config.ini
Tasks can be stored in 3 differents ways : in file, in MySql or SqlLite database. Fill in appropriate section in config file. You can tweak [task_manager] sections (in seconds) depending on your tasks manager behavior and your server capacities
[task_store]
TASK_STORE_METHOD = 'file';'file'|'mysql'|'sqllite'
[task_store_file]
TASK_STORE_FILE = '/var/www/my-project/tasks.json'
[task_tmp_file]
TASK_TMP_FILE = '/tmp'
[task_store_mysql]
TASK_STORE_MYSQL_USER = 'username'
TASK_STORE_MYSQL_PASS = 'password'
TASK_STORE_MYSQL_HOST = 'localhost'
TASK_STORE_MYSQL_PORT = 3306
TASK_STORE_MYSQL_DB = 'database_name'
TASK_STORE_MYSQL_TABLE = 'tasks_table_name'
TASK_STORE_MYSQL_ENV = 'dev';'dev'|'prod'
[task_store_sqllite]
TASK_STORE_SQLLITE_FILE = '/var/www/my-project/tasks.sqllite.db'
TASK_STORE_SQLLITE_USER = ''
TASK_STORE_SQLLITE_PASS = ''
TASK_STORE_SQLLITE_DB = 'database_name'
TASK_STORE_SQLLITE_TABLE = 'tasks_table_name'
TASK_STORE_MYSQL_ENV = 'dev';'dev'|'prod'
[task_manager]
LOAD_PENDING_TASKS_DELAY = 15
CHECK_RUNNING_PIDS_DELAY = 4
PROCESS_TASKS_DELAY = 4
Edit process_tasks.php
In this file, you will define your different tasks names and how many threads can run concurrently for each task.
# Load config.ini file require_once __DIR__ . '/config.php'; require_once __DIR__ . '/../vendor/autoload.php'; use Hug\Tasks\TaskStore as TaskStore; use Hug\Tasks\TaskManager as TaskManager; use Hug\Tasks\Task as Task; # Define task_name => max threads $tasks_threads = [ 'export' => 1, 'download' => 1, 'delete' => 1, 'extract' => 5, 'check_availability' => 5, 'check_metrics' => 5 ]; # Create Task Store (see config.ini for params) $task_store = TaskStore::getInstance(); # Start Task Manager $TaskManager = new TaskManager($tasks_threads, $task_store);
Run The task manager on command line for testing purposes
php process_tasks.php
In production mode, use a tool like supervisord to always run your task manager
[program:phptasks]
command=bash -c "ulimit -n 10000; exec /usr/bin/php /var/www/my-project/process_tasks.php"
process_name=phptasks
numprocs=1
autostart=true
autorestart=true
user=www-data
stdout_logfile=/var/log/supervisor/supervisor-phptasks-info.log
stdout_logfile_maxbytes=1MB
stderr_logfile=/var/log/supervisor/supervisor-phptasks-error.log
stderr_logfile_maxbytes=1MB
Add Tasks add_task.php
In another php file, create a task and add it to the task store.
# Create Task Store (see config.ini for params) $task_store = TaskStore::getInstance(); # Create a Task $task = new Task(1, null, 'export', 'ls -lsa', ['project_id' => 34]); # Save Task $task_store->save($task);
Task status can be one of following : 'pending', 'running', 'closed', 'failed'
Author
Hugo Maugey Webmaster | Consultant SEO | Fullstack developer