前言
关于如何实现与控制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");