byjg / php-daemonize
无需修改或重构,将任何类转换为*nix守护进程或cron作业。
4.9.1
2024-06-05 02:17 UTC
Requires
- php: >=7.4.0
- symfony/console: ^5.4 | ^6.2
Requires (Dev)
- phpunit/phpunit: 5.7.*|7.4.*|^9.5
README
无需修改或重构,将任何类转换为*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¶m2=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