又改进了下烂服务器的宕机自动重启脚本,让逻辑简单一点.
function string2array($xml) { preg_match_all('/<(.*?)>([^<]+)</\1>/i', $xml, $match); $result = array(); foreach ($match[1] as $x => $y) { $result[$y] = $match[2][$x]; } return $result; } $ch = curl_init(); curl_setopt($ch, CURLOPT_URL, 'https://solusvm.virmach.com/api/client/command.php?key=' . $api_key . '&hash=' . $api_hash . '&action=status'); curl_setopt($ch, CURLOPT_HEADER, false); curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); curl_setopt($ch, CURLOPT_HTTPHEADER, array( 'Expect: ' )); curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0); curl_setopt($ch, CURLOPT_NOSIGNAL, true); curl_setopt($ch, CURLOPT_TIMEOUT_MS, 2000); /* Time-out => 2000ms */ $data = curl_exec($ch); if ($data) { $result = string2array($data); } else { /* 服务器状态未知. */ exit(0); } if (strcmp($result['vmstat'], 'offline')) { /* 服务器正常 */ } else { /* 服务器异常 */ curl_setopt($ch, CURLOPT_URL, 'https://solusvm.virmach.com/api/client/command.php?key=' . $api_key . '&hash=' . $api_hash . '&action=boot'); $data = curl_exec($ch); if ($data) { $result = string2array($data); if (strcmp($result['vmstat'], 'booted')) { /* 不能重新开机 */ } else { /* 重新开机 */ } } else { /* 重启状态未知. */ } }
然后把脚本加到crontab里面.示例.
*/1 * * * * /usr/bin/php /full-path/check-offline.php
愉快的看着烂服务器.