php實現連續ping遠程伺服器指令碼,phpping指令碼
使用情境:公司的國外伺服器訪問緩慢,較長時間未訪問其資源,導致解析訪問緩慢。
指令碼作用:持續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();?>