firehed / processmanager
用于守护进程工作者的简单基础
dev-master
2019-02-26 20:25 UTC
Requires
- php: >=5.4.0
- ext-pcntl: *
- ext-posix: *
- psr/log: >=1.0.0
This package is auto-updated.
Last update: 2024-08-27 08:21:57 UTC
README
要求
posix
和pcntl
扩展- PHP5.4+ (使用现代语法)
- 对命令行PHP的基本了解
守护进程
一个非常实用的工具,但名字非常无聊。用两行代码守护你的PHP脚本。
使用方法
代码
<?php
// Preferred:
require 'vendor/autoload.php'; // composer
declare(ticks=1);
(new Firehed\ProcessControl\Daemon)
->setUser('sites')
->setPidFileLocation('/var/run/gearman-manager2.pid')
->setStdoutFileLocation(sys_get_temp_dir().'/my.log')
->setStdErrFileLocation('/dev/null')
->setProcessName(basename(__FILE__).' master process')
->autoRun();
// The rest of your original script
CLI
php yourscript.php {status|start|stop|restart|reload|kill}
是的,就这么简单。
操作
- 状态:检查进程状态。返回
- 0 如果正在运行
- 1 如果已经死亡但pid文件仍在
- 3 如果已停止
- 启动:启动守护进程
- 停止:通过SIGTERM优雅地停止守护进程
- 重启:如果正在运行则停止并启动
- 重新加载:向守护进程发送SIGUSR1(你需要实现一个重新加载功能,见下文)
- 杀死:通过SIGKILL(kill -9)杀死守护进程
选项
setProcessName($string)
:设置进程名称,它将出现在如top
等实用程序中。此功能仅在PHP5.5+下受支持。setPidFileLocation($path)
:指定pid文件的位置。此文件在守护进程运行时存储进程ID,在守护进程停止时消失。setStdoutFileLocation($path)
:任何本应写入STDOUT
(echo
、print
等)的内容将被重定向到的文件。setStdErrFileLocation($path)
:任何本应写入STDERR
的内容将被写入的文件。似乎在守护进程化后,display_errors
不再写入STDERR
,因此将其设置为/dev/null
相对安全。setUser($system_user)
:如果你想以低安全级别的用户运行进程,请在此处指定用户名。如果你在具有chkconfig
和/etc/init.d
的系统上启动守护进程,这尤其有用,因为那些以root身份运行。
稍后提供(?)
- 详细输出
- 同步模式(调试时不守护进程化)
- 日志文件配置
有用提示
- STDOUT(echo、print)被重定向到日志文件。
- "重新加载"命令没有安装SIGUSR1的处理程序将不会执行任何操作。示例即将提供。
已知问题
- 尽管为它打开了一个日志文件,但似乎
STDERR
并没有去任何地方。 - 脚本无法自动设置"重新加载"绑定。这是一个PHP限制:"declare构造也可以在全局范围内使用,影响其后的所有代码(然而,如果包含declare的文件,则不会影响父文件)"。 http://docs.php.net/manual/en/control-structures.declare.php