hugsbrugs / php-tasks
该软件包最新版本(dev-master)没有提供许可证信息。
PHP任务工具
dev-master
2021-01-24 13:13 UTC
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-09-24 20:56:27 UTC
README
此库提供用于管理任务处理的实用函数
安装
使用composer安装软件包
composer require hugsbrugs/php-tasks
在您的PHP代码中加载库
require_once __DIR__ . '/../vendor/autoload.php'; use Hug\Tasks\Tasks as Tasks;
编辑config.ini文件
任务可以以以下三种方式存储:在文件中、在MySql或SQLite数据库中。在配置文件中填写相应的部分。您可以根据任务管理器的行为和您的服务器能力调整[task_manager]部分(以秒为单位)
[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
编辑process_tasks.php文件
在此文件中,您将定义不同的任务名称以及每个任务可以并发运行的线程数。
# 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);
为测试目的在命令行上运行任务管理器
php process_tasks.php
在生产模式下,使用如supervisord之类的工具始终运行您的任务管理器
[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_task.php
在另一个PHP文件中创建任务并将其添加到任务存储中。
# 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);
任务状态可以是以下之一:'待处理'、'正在运行'、'已关闭'、'失败'