前言

关于如何实现与控制php常驻进程,不管是google还是baidu上进行搜索,都没有感觉看起来赏心悦目的解答,于是决定自己动手总结下。

有同学会问了,整这个干甚?简单的说就是,可以让一个php脚本一直处于运行的状态。从而实现将项目中某些耗时操作异步化,进队列后由php脚本取出再执行。

有同学又会问了,直接在服务器直接命令“php test.php &”,不就可以实现了?那么这样做的话有三点还需要考虑:1.如何保证此进程的稳定性(挂了怎么办)2.如果想开10个进程,手动去执行10回好像不怎么友好。3.关闭的话需要手动杀死进程?

有同学又会问了,这个不是在crontab加一个定时任务从而一直去执行不就好了,而且保证了稳定性。准确地说这也是可以的,但是有三点需要考虑:1.每回新增队列都要加一回crontab真的好吗。2.还是开10的进程问题(同上)。3.那要是关闭的话还要去备注crontab任务?

所以本文所设计的方案主要解决以下几个问题:

1.如果实现php的常驻?(不依赖第三方php扩展)

2.如何保证进程的稳定性(谁来守护的问题)?

3.如何方便的管理php进程的关闭与重启?

4.如何方便的管理php进程的并发数?

5.如何进行对php进程的监控?

正文

demo文件描述

cron_demo

1.cron_watchdog.sh:用于添加以及调起php进程

2.cron_watchdogd.sh:用于监控cron_watchdog.sh,保证其一直在运行

3.cron_zombie_alert.sh:用于进程文件的扫描监控,与错误通知。

privdata/cron_demo

cron_count.ini:用于控制php进程的并发数

cron_switch.ini:用于控制php进程的开关

cron_status/ :用于存在标记php进程的pid,以供cron_zombie_alert.sh扫描

cron_kill.log:用于记录cron_zombie_alert.sh扫描到并且kill的僵尸进程。

由于是一看就懂系列,故具体文件解析会附带上详细的解读。

cron_watchdog.sh的实现与解读

代码实现

#!/bin/bash

#该脚本需在bash版本>=4中执行

#输出当前地址

CRON_DIR=$(cd $(dirname "$0"); pwd)

#执行进程监控脚本的命令

zombie_alert_cmd="/bin/sh $CRON_DIR/cron_zombie_alert.sh& > /dev/null"

#获取ph