background image

 

到一个 SQLS 数组里,等 500 个用户全部检测完了之后,循环 SQLS 数组,更新表里这
500 个名单,并将 flag 标志位设置为 1

 

, 表示已经检测完,下次就不获取了。

由于 PHP 脚本代码较长,这里分享下简单的代码说明:
shell 脚本作为保证 PHP 脚本不挂掉的守护进程实例分享
发布:jingxian 字体:[

 

增加 减小] 类型:转载

以下是对用 shell 脚本作为保证 PHP 脚本不挂掉的守护进程实例进行了分析介绍,需要的
朋友可以参考下
前几天开始跑一份数据名单,名单需要提供用户名、是否有手机号、是否有邮箱,用户名
单我轻易的获取到了,但是,用户名单有 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='名单表'; 

 
我先将 2000 多 w 用户名导入到这个临时表,has_phone 与 has_email 这二个字段默认都是
0(没有),标志位 flag 说明该用户是否已经检测完。
下面是一部分表数据:
9873aaa,0,0,0
adddwwwd876222,0,0,0
testalexlee,0,0,0
codejia.net,0,0,0
haohdouywaa21,0,0,0

 

 

2、PHP 脚本 check_users.php

 

将 用户名单导入到表之后,再写一个简单的 PHP 脚本,思路是这样的:每次循环从表取