>  기사  >  백엔드 개발  >  php实现连续ping远程服务器脚本

php实现连续ping远程服务器脚本

WBOY
WBOY원래의
2016-06-23 13:31:07864검색

使用场景:公司的国外服务器访问缓慢,较长时间未访问其资源,导致解析访问缓慢。

脚本作用:持续ping该类服务器,保证中转路由能在业务使用时能够快速响应请求。

<?phpdefine ('LOGTAG', 'ping');declare(ticks = 1);$pid_arr = array();pcntl_signal(SIGQUIT, 'signal_handler');pcntl_signal(SIGTERM, 'signal_handler');function run($servers_info) {    echo "---------- ping task begin ----------";    global $pid_arr;    $index=0;    $name_arr = array();    $ip_arr = array();    foreach( $servers_info as $val) {        $name_arr[$index] = $val['server_name'];        $ip_arr[$index] = $val['server_ip'];        $index++;    }    $worker_count = $index;    $index=0;    while($index < $worker_count)     {        $pid = pcntl_fork();        if($pid == -1) {            die('could not fork');        }         else         {            if($pid) {                $pid_arr[$index] = $pid;            } else {                while(true) {                    handle($name_arr[$index], $ip_arr[$index]);                    sleep(1);                }            }        }        $index++;    }    while (true) {        sleep(1);    }}function handle($name,$ip) {    echo "ping ".$name." ip:".$ip." start!";    exec("ping -c 1000 $ip",$list);    echo "ping ".$name." ip:".$ip." finish!";}function signal_handler($signal) {    global $pid_arr;    if ($signal == SIGQUIT || $signal == SIGTERM)     {        foreach ($pid_arr as $pid) {            posix_kill($pid,SIGTERM);        }        echo ”????? ping task finish ----------";        exit();    }}run();?>



성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.