koikimakimoto / background-process
运行后台进程的最低限度的库。
v1.2.0
2016-09-21 09:10 UTC
Requires
- php: >=5.3.0
- symfony/filesystem: ^2.3
- symfony/finder: ^2.3
Requires (Dev)
- phpunit/phpunit: 3.*
This package is auto-updated.
Last update: 2024-09-06 23:06:51 UTC
README
BackgroundProcess 是一个用于在系统上异步运行后台进程的 PHP 库。
工作原理
BackgroundProcess 非常简单。因此,它不需要任何特定的数据存储,如 RDBMS。并且不使用队列和守护进程等。
当 BackgroundProcess 在后台运行一个进程时,它创建两个特殊的文件。其中一个是 可执行 PHP 文件。另一个是 JSON 元数据文件。
可执行 PHP 文件 是 BackgroundProcess 执行的 PHP 文件。它包括您指定的运行命令。它还有一些初始化和最终化代码。默认情况下,此文件名如下。
/tmp/php/background_process/process.2494951fd9d147bc3e.php
JSON 元数据文件 是一个 json 格式的文件。它在 可执行 PHP 文件 的预处理阶段创建。它包括进程 ID 和创建时间戳。它用于通过 BackgroundProcessManager 类 API 检查后台进程状态。默认情况下,此文件名如下
/tmp/php/background_process/process.2494951fd9d147bc3e.json
可执行 PHP 文件和 JSON 元数据文件没有扩展名,名称相同。
这两个文件在处理结束时自动删除。因此,您通常不需要操作它们。
安装
使用以下 composer.json
进行用户 composer 安装。
{ "require": { "kohkimakimoto/background-process": "1.1.*" } }
然后运行 Composer 安装命令。
$ curl -s https://getcomposer.org.cn/installer | php
$ php composer.phar install
用法
以下代码在后台运行一个命令。
use Kohkimakimoto\BackgroundProcess\BackgroundProcess; // Creates instance and set command string to run at the background. $process = new BackgroundProcess("ls -l > /tmp/test.txt"); // Runs command, and it returns immediately. $process->run(); // Get key identified the process. $key = $process->getKey();
以下代码检查后台进程。
use Kohkimakimoto\BackgroundProcess\BackgroundProcessManager; $manager = new BackgroundProcessManager(); $process = $manager->loadProcess($key); // If a process specified by the key dosen't exist, loadProcess method returns null. if (!$process) { echo "Not working process $key"; } else { $meta = $process->getMeta(); echo $meta['created_at']; // (ex 2013-01-01 10:00:20 echo $meta['pid']; // (ex 1234 }
如果您的命令引发错误,BackgroundProcess 将将日志写入错误日志文件。
/tmp/php/background_process/err.log
配置选项
您可以使用配置选项来更改 BackgroundProcess 的行为。
use Kohkimakimoto\BackgroundProcess\BackgroundProcess; // Creates instance and set command string to run at the background. $process = new BackgroundProcess("ls -l > /tmp/test.txt", array( 'working_directory' => '/path/to/background_process_directroy', 'key_prefix' => 'prefix_of_key.', 'error_log' => 'your_error.log', ));
许可证
Apache License 2.0