因为php连接网络超时,很容易导致nginx 504错误,网络上有很多解决办法,但是不知道为啥在我这里都不奏效。
所以我只好写一个脚本,定期检测我的站点是否504了,若有504,只好出绝招“重启nginx和php-fpm”,
具体代码如下:
#!/usr/bin/php 是你的php路径
-
#!/usr/bin/php
-
<?php
-
error_reporting(E_ERROR);
-
define("EMAIL","xxx@gmail.com");//你的email地址
-
define("TIMEOUT",5);//读取网站超时时间,5秒
-
function curl_get($url){
-
$curl = curl_init();
-
curl_setopt($curl, CURLOPT_URL, $url);
-
curl_setopt($curl, CURLOPT_RETURNTRANSFER, 1);
-
curl_setopt($curl, CURLOPT_TIMEOUT, TIMEOUT);
-
// Headers
-
$headers = array();
-
$headers[] = "Date: ".date('r');
-
curl_setopt($curl, CURLOPT_HTTPHEADER, $headers);
-
$Data = curl_exec($curl);
-
return $Data ;
-
-
}
-
-
function check($d,$k){
-
$url = $d;//"http://".$d;
-
$html = curl_get($url);
-
if( substr_count($html,$k) < 1){
-
mail(EMAIL,"JP 504 timeout for ".$d,$html);
-
exec("/etc/init.d/nginx restart "); //重启nginx
-
exec("/etc/init.d/php-fpm restart");//重启php-fpm
-
}
-
}
-
-
check("https://www.homezz.com","homezz.com");
-
?>
将该文件命名为 504check.php
修改权限 chmod +x 504check.php
然后crontab -e添加一行
* * * * * /xx/504check.php >/dev/null 2>&1
每分钟系统就会自动检测网站是否响应很慢,若如此,则重启