最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

shell腳本作為保證PHP腳本不掛掉的守護(hù)進(jìn)程實(shí)例分享

 更新時(shí)間:2013年07月15日 08:55:46   作者:  
以下是對(duì)用shell腳本作為保證PHP腳本不掛掉的守護(hù)進(jìn)程實(shí)例進(jìn)行了分析介紹,需要的朋友可以參考下

前幾天開(kāi)始跑一份數(shù)據(jù)名單,名單需要提供用戶名、是否有手機(jī)號(hào)、是否有郵箱,用戶名單我輕易的獲取到了,但是,用戶名單有2000w之多,并且去檢測(cè)用戶是否有手機(jī)號(hào)、是否有郵箱必須得通過(guò)一個(gè)對(duì)外開(kāi)放的安全接口一個(gè)一個(gè)用戶去請(qǐng)求,然后分析返回值才能知道。

下面是我處理的方案:
1、將2000w名單保存到臨時(shí)數(shù)據(jù)表
2、用PHP程序每次從該表獲取500個(gè)用戶,檢測(cè)完后生成SQL update原紀(jì)錄
3、為了防止PHP程序突然斷掉,用shell腳本每隔1分鐘檢測(cè),PHP掛掉了則重啟
我使用shell腳本作為守護(hù)進(jìn)程的原因是,手機(jī)與郵箱的檢測(cè)接口速度慢,不可能在1~2天將2000w用戶檢測(cè)完。

方案詳細(xì):
1、臨時(shí)保存用戶名單表users,表結(jié)構(gòu)如下:

復(fù)制代碼 代碼如下:

CREATE TABLE `users` (
  `account` varchar(50) COMMENT '用戶名',
  `has_phone` tinyint(3) unsigned NOT NULL default '0' COMMENT '是否有手機(jī)號(hào)',
  `has_email` tinyint(3) unsigned NOT NULL default '0' COMMENT '是否有郵箱',
  `flag` tinyint(3) unsigned  NOT NULL default '0' COMMENT '標(biāo)志位',
  PRIMARY KEY  (`account`),
  KEY `flag` (`flag`)
 ) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COMMENT='名單表';

我先將2000多w用戶名導(dǎo)入到這個(gè)臨時(shí)表,has_phone與has_email這二個(gè)字段默認(rèn)都是0(沒(méi)有),標(biāo)志位flag說(shuō)明該用戶是否已經(jīng)檢測(cè)完。
下面是一部分表數(shù)據(jù):
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
將 用戶名單導(dǎo)入到表之后,再寫一個(gè)簡(jiǎn)單的PHP腳本,思路是這樣的:每次循環(huán)從表取flag=0的500個(gè)用戶,然后請(qǐng)求接口判斷用戶是否有手機(jī)號(hào)、郵箱, 生成一條SQL,保存到一個(gè)SQLS數(shù)組里,等500個(gè)用戶全部檢測(cè)完了之后,循環(huán)SQLS數(shù)組,更新表里這500個(gè)名單,并將flag標(biāo)志位設(shè)置為1, 表示已經(jīng)檢測(cè)完,下次就不獲取了。
由于PHP腳本代碼較長(zhǎng),這里分享下簡(jiǎn)單的代碼說(shuō)明:
復(fù)制代碼 代碼如下:

<?php
class Users{
    private $data;
    private $sqls;
    private $nums;         //判斷是否有500用戶
    private $total_nums;   //當(dāng)前已經(jīng)檢測(cè)完的用戶數(shù)量

    //每次取500個(gè)用戶
    private function getUsers(){...}

    //檢測(cè)這500個(gè)用戶并生成SQL
    private function checkUserInfo(){...}

    //更新這500個(gè)用戶
    private function updateUserInfo(){...}

    //運(yùn)行
    public function run(){
        $flag = true;
        while($flag){
             if($this->nums != 500){ $flag = false; }
             if($this->total_nums == 10000){ 
                exit(0); //跑完1w個(gè)用戶就退出,由守護(hù)進(jìn)程啟動(dòng)
             }
             $this->getUsers();
             $this->checkUserInfo();
             $this->updateUserInfo();
             sleep(1); //跑完500用戶休息1秒,保護(hù)用戶檢測(cè)接口     
         }
    }
}

$user = new Users();
$user->run();
?>

上面是簡(jiǎn)潔版的PHP腳本,大概意思到了,剛開(kāi)始的版本是沒(méi)有$total_nums這個(gè)變量,是因?yàn)閯傞_(kāi)始跑這個(gè)腳本的時(shí)候,發(fā)現(xiàn)只跑完了4w多條腳本就掛球了,后來(lái)一看,是因?yàn)檫B接數(shù)據(jù)庫(kù)沒(méi)連上,腳本一直掛在那里。加上這個(gè)變量也無(wú)法解決這個(gè)問(wèn)題,只是在每次跑完1w個(gè)用戶之后,PHP腳本退出,再由下面的shell腳本重新啟動(dòng)。

3、shell腳本作為守護(hù)進(jìn)程
我把這個(gè)shell腳本加到了crontab里邊,每隔1分鐘執(zhí)行一次,這個(gè)shell腳本很簡(jiǎn)單,檢測(cè)check_users.php是否存在進(jìn)程id,如果存在,則說(shuō)明PHP腳本還在運(yùn)行,shell腳本不做任何操作;如果不存在,則說(shuō)明PHP腳本已經(jīng)exit(0)跑完了1w用戶退出了,那么shell腳本啟動(dòng)該腳本,進(jìn)入下一個(gè)1w用戶名單的檢測(cè)。
上面我有講到,如果PHP腳本在連接數(shù)據(jù)庫(kù)的時(shí)候,無(wú)法連接上的時(shí)候,PHP會(huì)一直掛球在那里,無(wú)法退出了。我在shell腳本里加了一個(gè)時(shí)間檢測(cè),當(dāng)PHP腳本進(jìn)程存在的時(shí)候,計(jì)算已經(jīng)存在了多長(zhǎng)時(shí)間,如果超過(guò)了我預(yù)想的時(shí)間,則將PHP腳本kill掉,再重啟。

開(kāi)頭的舉例數(shù)據(jù),結(jié)果類似如下:
testalexlee,1,0,1
codejia.net,0,0,1
haohdouywaa21,1,1,1
9873aaa,0,1,1
adddwwwd876222,1,0,1

說(shuō)在最后:以上用戶名單數(shù)據(jù)只是舉個(gè)栗子,不要太認(rèn)真,2000w數(shù)據(jù),我估計(jì)要跑一段時(shí)間了,因?yàn)闄z測(cè)接口比較慢,接口在接到請(qǐng)求后還要連表,查表,再返回。其實(shí),最好的方法還是直接從接口請(qǐng)求的表拉一份名單出來(lái),再用shell命令處理下很快就有結(jié)果了,可是在公司就是這樣,有些東西不開(kāi)放的,你懂的~~~

相關(guān)文章

  • PHP互換兩個(gè)變量值的方法(不用第三變量)

    PHP互換兩個(gè)變量值的方法(不用第三變量)

    相信每個(gè)剛接觸PHP語(yǔ)言的童鞋們應(yīng)該藕知道,PHP中兩個(gè)變量的值互換是個(gè)很常見(jiàn)的做法,那么下面這篇文章我們就來(lái)介紹幾個(gè)對(duì)于變量值互換的常見(jiàn)操作方法,文中介紹的很詳細(xì),相信對(duì)于大家的理解和學(xué)習(xí)很有幫助,下面有需要的朋友們來(lái)一起看看吧。
    2016-11-11
  • PHP持久連接mysql_pconnect()函數(shù)使用介紹

    PHP持久連接mysql_pconnect()函數(shù)使用介紹

    mysql_pconnect()函數(shù)可以大大的提高M(jìn)YSQL效率,不過(guò),此連接不自動(dòng)關(guān)閉,也會(huì)造成一些問(wèn)題,請(qǐng)注意將不用的連接即時(shí)關(guān)閉,以避免不必要的錯(cuò)誤發(fā)生
    2012-02-02
  • php基于mcrypt_encrypt和mcrypt_decrypt實(shí)現(xiàn)字符串加密解密的方法

    php基于mcrypt_encrypt和mcrypt_decrypt實(shí)現(xiàn)字符串加密解密的方法

    這篇文章主要介紹了php基于mcrypt_encrypt和mcrypt_decrypt實(shí)現(xiàn)字符串加密解密的方法,結(jié)合實(shí)例形式分析了mcrypt_encrypt和mcrypt_decrypt函數(shù)進(jìn)行加密、解密的相關(guān)使用技巧,需要的朋友可以參考下
    2016-07-07
  • php代碼運(yùn)行時(shí)間查看類代碼分享

    php代碼運(yùn)行時(shí)間查看類代碼分享

    php代碼運(yùn)行時(shí)間查看類代碼,主要是用來(lái)查看php代碼的運(yùn)行時(shí)間。
    2011-08-08
  • PHP7新特性之抽象語(yǔ)法樹(shù)(AST)帶來(lái)的變化詳解

    PHP7新特性之抽象語(yǔ)法樹(shù)(AST)帶來(lái)的變化詳解

    這篇文章主要介紹了PHP7新特性之抽象語(yǔ)法樹(shù)(AST)帶來(lái)的變化,結(jié)合實(shí)例形式分析了PHP7抽象語(yǔ)法樹(shù)的相關(guān)概念、功能、特性、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下
    2018-07-07
  • php file_put_contents()功能函數(shù)(集成了fopen、fwrite、fclose)

    php file_put_contents()功能函數(shù)(集成了fopen、fwrite、fclose)

    php file_put_contents()功能函數(shù)(集成了fopen、fwrite、fclose) ,需要的朋友可以參考下。
    2011-05-05
  • php的ajax框架xajax入門與試用介紹

    php的ajax框架xajax入門與試用介紹

    xajax功能很簡(jiǎn)單,但很靈活!~它不象其它一些大的框架,功能確實(shí)強(qiáng)大,但執(zhí)行速度不敢恭維。。功能雖多,但不夠靈活。api多,學(xué)起來(lái)簡(jiǎn)直如同學(xué)習(xí)一門新的語(yǔ)言。
    2010-12-12
  • PHP語(yǔ)言中g(shù)lobal和$GLOBALS[]的分析 之二

    PHP語(yǔ)言中g(shù)lobal和$GLOBALS[]的分析 之二

    PHP語(yǔ)言中g(shù)lobal和$GLOBALS[]的分析 之二,需要的朋友可以參考下
    2012-02-02
  • PHP實(shí)現(xiàn)的多維數(shù)組去重操作示例

    PHP實(shí)現(xiàn)的多維數(shù)組去重操作示例

    這篇文章主要介紹了PHP實(shí)現(xiàn)的多維數(shù)組去重操作,結(jié)合實(shí)例形式分析了php序列化json字符串及數(shù)組轉(zhuǎn)換、去重等相關(guān)操作技巧,需要的朋友可以參考下
    2018-07-07
  • PHP安全防范技巧分享

    PHP安全防范技巧分享

    這里簡(jiǎn)單介紹一些基本編程要點(diǎn), 相對(duì)系統(tǒng)安全來(lái)說(shuō),php安全防范更多要求編程人員對(duì)用戶輸入的各種參數(shù)能更細(xì)心.
    2011-11-11

最新評(píng)論

遂平县| 邮箱| 姚安县| 合阳县| 光泽县| 富源县| 沽源县| 开平市| 永吉县| 稻城县| 读书| 日照市| 灌南县| 保德县| 繁峙县| 潍坊市| 安岳县| 新宾| 图木舒克市| 洱源县| 兴业县| 洮南市| 沂南县| 吉木萨尔县| 荃湾区| 且末县| 台北市| 舞钢市| 武陟县| 微博| 广安市| 鄂州市| 运城市| 竹北市| 井冈山市| 辽阳县| 绥江县| 房产| 梧州市| 南通市| 庆阳市|