linux+守护进程+php,linux – 管理php守护进程

如何在不将简单的cli运行时更改为php-fpm的情况下从Web管理我的守护程序?

操作系统启动后守护进程自动启动,并在没有php-fpm池的情况下作为cli-application运行.所以守护进程生态系统的基本思想是在没有php-fpm池(CLI-SAPI)的情况下工作.

服务器配置:

> Debian 7

> Apache 2.2

> php5-fpm(v 5.4.35) – mod_fastcgi

> daemon.php

> daemon_manager.php – 从命令行开始|停止|重新启动| kill daemon.php的管理脚本.

> daemon_manager_web.php – 用于从浏览器管理守护程序的管理员脚本.

daemon.php是一个常规的php守护进程,如下所示:

declare(ticks=1);

ini_set("max_execution_time", "0");

ini_set("max_input_time", "0");

set_time_limit(0);

/* Catching signals */

function sig_handler($signo) {

switch ($signo) {

case SIGQUIT:

case SIGTERM:

// some work

pcntl_wait($status);

break;

//...

}

}

pcntl_signal(SIGTERM, 'signal_handler');

pcntl_signal(SIGQUIT, 'signal_handler');

$newpid = pcntl_fork();

if ($newpid == -1) {

throw new Exception('Cannot fork porcess');

} elseif ($newpid) {

print "Starting daemon under pid=$newpid\n";

// ...

exit;

}

问题.

由于无法从Web获得PCNTL函数,因此我通过exec(),shell_exec()等函数来管理守护程序.但是当我使用浏览器中的daemon_manager_web.php再次停止并启动守护程序时,它通常会启动但在php-fpm池下工作.

重启前的进程列表:

$ps aux | grep php

root 5952 0.0 2.9 69008 14952 pts/0 S 14:24 0:00 php /var/www/daemon.php

$service php5-fpm status

php5-fpm.service - LSB: starts php5-fpm

Loaded: loaded (/etc/init.d/php5-fpm)

Active: active (running) since Fri, 05 Dec 2014 11:28:25 +0200; 11h ago

Process: 1003 ExecStart=/etc/init.d/php5-fpm start (code=exited, status=0/SUCCESS)

CGroup: name=systemd:/system/php5-fpm.service

├ 1627 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)

├ 9562 php-fpm: pool www

├ 9605 php-fpm: pool www

└ 9633 php-fpm: pool www

从浏览器重启后进程列表:

$service php5-fpm status

php5-fpm.service - LSB: starts php5-fpm

Loaded: loaded (/etc/init.d/php5-fpm)

Active: active (running) since Fri, 05 Dec 2014 11:28:25 +0200; 11h ago

Process: 1003 ExecStart=/etc/init.d/php5-fpm start (code=exited, status=0/SUCCESS)

CGroup: name=systemd:/system/php5-fpm.service

├ 1627 php-fpm: master process (/etc/php5/fpm/php-fpm.conf)

├ 4987 php-fpm: pool www

├ 5040 php-fpm: pool www

├ 9432 php-fpm: pool www

└ 9492 /usr/bin/php /var/www/daemon.php

解决方法:

你不应该以任何方式通过Apache启动一个守护进程.正确的方法是启动一个守护进程(由supervisord管理,我在生产中使用它有相当好的跟踪记录)和opening a file socket(AF_UNIX),你在其上进行socket_select()和空闲等待一些触发处理的输入.这样,“接口”(在Apache上)只是连接到套接字并写入它.

在那个主题上,我发现在PHP中编写守护进程非常繁琐,你可能想选择一个库来处理你的细节(不能推荐任何)或者甚至是另一个更适合守护进程典型事件循环的工具(node.js的?)

标签:php,linux,daemon,apache2-2

来源: https://codeday.me/bug/20190703/1362259.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值