这篇文章主要为大家详细介绍了PHP利用shell保证脚本不挂掉的守护进程的简单示例,具有一定的参考价值,可以用来参考一下。
感兴趣的小伙伴,下面一起跟随四海网的小玲来看看吧!
前几天开始跑一份数据名单,名单需要提供用户名、是否有手机号、是否有邮箱,用户名单我轻易的获取到了,但是,用户名单有2000w之多,并且去检测用户是否有手机号、是否有邮箱必须得通过一个对外开放的安全接口一个一个用户去请求,然后分析返回值才能知道。
下面是我处理的方案:
1、将2000w名单保存到临时数据表
2、用PHP程序每次从该表获取500个用户,检测完后生成SQL update原纪录
3、为了防止PHP程序突然断掉,用shell脚本每隔1分钟检测,PHP挂掉了则重启
我使用shell脚本作为守护进程的原因是,手机与邮箱的检测接口速度慢,不可能在1~2天将2000w用户检测完。
方案详细:
1、临时保存用户名单表users,表结构如下:
代码如下:
CREATE TABLE `users` (
`account` varchar(50) COMMENT '用户名',
`has_phone` tinyint(3) unsigned NOT NULL default '0' COMMENT '是否有手机号',
`has_email` tinyint(3) unsigned NOT NULL default '0' COMMENT '是否有邮箱',
`flag` tinyint(3) unsigned NOT NULL default '0' COMMENT '标志位',
PRIMARY KEY (`account`),
KEY `flag` (`flag`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='名单表';
代码如下:
<?php
/* 四海网 www.q1010.com */
class Users{
private $data;
private $sqls;
private $nums; //判断是否有500用户
private $total_nums; //当前已经检测完的用户数量
//每次取500个用户
private function getUsers(){...}
//检测这500个用户并生成SQL
private function checkUserInfo(){...}
//更新这500个用户
private function updateUserInfo(){...}
//运行
public function run(){
$flag = true;
while($flag){
if($this->nums != 500){ $flag = false; }
if($this->total_nums == 10000){
exit(0); //跑完1w个用户就退出,由守护进程启动
}
$this->getUsers();
$this->checkUserInfo();
$this->updateUserInfo();
sleep(1); //跑完500用户休息1秒,保护用户检测接口
}
}
}
$user = new Users();
$user->run();
?>
3、shell脚本作为守护进程
我把这个shell脚本加到了crontab里边,每隔1分钟执行一次,这个shell脚本很简单,检测check_users.php是否存在进程id,如果存在,则说明PHP脚本还在运行,shell脚本不做任何操作;如果不存在,则说明PHP脚本已经exit(0)跑完了1w用户退出了,那么shell脚本启动该脚本,进入下一个1w用户名单的检测。
上面我有讲到,如果PHP脚本在连接数据库的时候,无法连接上的时候,PHP会一直挂球在那里,无法退出了。我在shell脚本里加了一个时间检测,当PHP脚本进程存在的时候,计算已经存在了多长时间,如果超过了我预想的时间,则将PHP脚本kill掉,再重启。
开头的举例数据,结果类似如下:
testalexlee,1,0,1
codejia.net,0,0,1
haohdouywaa21,1,1,1
9873aaa,0,1,1
adddwwwd876222,1,0,1
说在最后:以上用户名单数据只是举个栗子,不要太认真,2000w数据,我估计要跑一段时间了,因为检测接口比较慢,接口在接到请求后还要连表,查表,再返回。其实,最好的方法还是直接从接口请求的表拉一份名单出来,再用shell命令处理下很快就有结果了,可是在公司就是这样,有些东西不开放的,你懂的~~~
本文来自:http://www.q1010.com/173/14957-0.html
注:关于PHP利用shell保证脚本不挂掉的守护进程的简单示例的内容就先介绍到这里,更多相关文章的可以留意四海网的其他信息。
关键词:脚本
四海网收集整理一些常用的php代码,JS代码,数据库mysql等技术文章。