byjg/php-daemonize

无需修改或重构,将任何类转换为*nix守护进程或cron作业。

资助包维护!
byjg

4.9.1 2024-06-05 02:17 UTC

This package is auto-updated.

Last update: 2024-09-16 06:38:54 UTC


README

Build Status Opensource ByJG GitHub source GitHub license GitHub release

无需修改或重构,将任何类转换为*nix守护进程或cron作业。

动机

有时我们需要创建一个cron表或后台运行的过程。大多数时候,我们需要创建一个新类,可能在不同的框架中,并可能需要为创建作业/守护进程选择另一种语言。

"Daemonize" 允许您在不修改现有类的情况下创建Linux守护进程或用于cron表的作业。

"Daemonize" 是一个脚本,创建一个"init.d"脚本并封装或类,使您能够在bash中运行它,例如。

如何使用

假设您有一个现有的类,用于从数据库中读取一些信息并使用这些数据执行一些操作。例如

<?php
namespace Some\Name\Space;

class MyExistingClass
{
	// ...

    public function someExistingMethod()
    {
        // Your code
    }

	// ...
}

如果您想将此类和方法转换为Linux守护进程(或“daemonize”它),您必须首先创建一个引导PHP文件。

最简单的引导文件是 vendor/autoload.php,但您可以根据需要创建更复杂的引导文件。

以下是一个引导文件的示例

require_once __DIR__ . "/vendor/autoload.php";

// Your code here

现在,如果您想测试它,您可以运行以下命令

daemonize run \
    "\\Some\\Name\\Space\\MyExistingClass::someExistingMethod" \
    --bootstrap "relative/path/to/bootstrap.php" \
    --rootdir "/path/to/root" \
    --http-get "param1=value1&param2=value2"

您可以使用以下命令进行测试

daemonize run \
    "\\ByJG\\Daemon\\Sample\\TryMe::ping"
    --arg value1
    --arg value2

如果一切正常,现在您可以“daemonize”此类(作为root用户)

daemonize install --template=systemd mydaemon \
    --class "\\Some\\Name\\Space\\MyExistingClass::someExistingMethod" \
    --bootstrap "relative/path/to/bootstrap.php" \
    --rootdir "/path/to/root"

注意:有效的模板是

  • systemd(默认)
  • upstart
  • initd
  • crond

现在,要启动或停止服务,您只需要

sudo service mydaemon start  # or stop, status or restart

要卸载,只需输入

daemonize uninstall mydamon

并列出所有“daemonized”的PHP类

daemonize services --only-names

安装

Daemonize不需要与您的PHP项目关联。您可以将它作为一个全局包或作为一个本地包。

composer global require "byjg/php-daemonize"
sudo ln -s /root/.composer/vendor/bin/daemonize /usr/local/bin/daemonize

如果您想与其他用户共享此安装,请考虑使用命令 chmod a+x /root。根目录将对他们不可读,但您将可以执行“daemonize”脚本。

运行预安装的演示

打开两个终端。

首先执行

touch /etc/tryme.txt
tail -f /etc/tryme.txt

在第二个终端中执行

sudo daemonize install --template=upstart tryme "\\ByJG\\Daemon\\Sample\\TryMe::process" "vendor/autoload.php" "./"

sudo service tryme start

如果一切正常,您将在第一个终端看到很多行被添加。不要忘记运行 sudo service tryme stop

环境变量

依赖关系

开源ByJG