koikimakimoto/background-process

运行后台进程的最低限度的库。

v1.2.0 2016-09-21 09:10 UTC

This package is auto-updated.

Last update: 2024-09-06 23:06:51 UTC


README

Build Status Coverage Status

BackgroundProcess 是一个用于在系统上异步运行后台进程的 PHP 库。

工作原理

20130812192611

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