想做一个网站保姆的开发

#1 andy80129

大家好~我一个站长,想做一个网站保姆,就是实时监控数十个网站的运行情况~发生有网站当掉就给自己发邮件提醒~不用一个个网站检查的小程序~用这个框架可以实现吗?

2013-09-24 10:28:20

#2 jake

框架肯定是可以的,关键功能在cron。建议是使用BAE环境自带cron

http://developer.baidu.com/wiki/index.php?title=docs/cplat/rt/php/cron

2013-09-24 11:19:03

#3 andy80129

jake 发表于 2013-9-24 11:19
框架肯定是可以的,关键功能在cron。建议是使用BAE环境自带cron

http://developer.baidu.com/wiki/index.p ...
谢谢~刚刚大慨的看了一下~目前单个开发者最大cron数只有20个~
可是我的小网站有近100个了~有没有别的好方法实现的?
初来咋到,请多关照啊~

2013-09-24 11:40:29

#4 jake

andy80129 发表于 2013-9-24 11:40
谢谢~刚刚大慨的看了一下~目前单个开发者最大cron数只有20个~
可是我的小网站有近100个了~有没有别的 ...
不能是“大概看”一下,最好是认真看看。

理解一下:cron是定时任务,1个定时任务里面可以做任何的操作,包括访问100个网站。

2013-09-24 12:56:05

#5 andy80129

jake 发表于 2013-9-24 12:56
不能是“大概看”一下,最好是认真看看。

理解一下:cron是定时任务,1个定时任务里面可以做任何的操作 ...
喔~是这样啊~呵呵~嗯嗯~不好意思,是我理解错了,您刚才发的页面我仔细看过了~也进百度应用里注册~整个流程都走了一下~还是不太满足自己民的需求~我希望自己能在程序里设定扫描间隔时间~类似于Radar Website Monitor 软件的那种网站保姆~我是刚开始用PHP,之前有些别的语言底子,有说错了的请不要见怪啊~我知道PHP不支持多线程,可不可能用模似多线程加ajax局部刷新的方法来做?

2013-09-24 14:30:27

#6 jake

andy80129 发表于 2013-9-24 14:30
喔~是这样啊~呵呵~嗯嗯~不好意思,是我理解错了,您刚才发的页面我仔细看过了~也进百度应用里注册~ ...
虽然它是在百度平台上面设置的,但是它也是跑你的php程序来执行你要的操作的。

cron最短时间是1分钟,所以要做到在你的php程序里面设定扫描间隔时间是肯定可以做到的。

比如说间隔5分钟扫描的,那么就在1分钟启动,下个4分钟不启动,然后再启动1分钟,下个4分钟不启动。

ajax是做不到你希望的样子,因为ajax是浏览器启动的。

目前业界所有的网站可用性监控,都是通过cron这种定时任务来实现的。




2013-09-24 15:02:59

#7 andy80129

jake 发表于 2013-9-24 15:02
虽然它是在百度平台上面设置的,但是它也是跑你的php程序来执行你要的操作的。

cron最短时间是1分钟,所 ...
也就是说PHP本身不能做定时任务吗?或者借用apache都不能做是吗?
因为要扫描的网站较多~我想每个网站扫描的间隔时间单独错开来设,
所以想尽量便用自己开发的,借用别的平台始终是不好。
如果不借用百度平台可以给一个解决思路吗?谢谢了~

2013-09-24 16:15:28

#8 jake

cron是linux的定时服务,可以在随便一台linux上面设置。它也会定时执行php。

关于你说的扫描时间间隔问题,你可以把cron想象成一个无限循环任务,它会不间断地执行php,至于要什么间隔执行哪些网站的扫描任务,那是你这个不断执行的PHP程序所控制的。

估计上面说的你也没理解,或者可以直接上手试试吧。

2013-09-24 16:40:00

#9 andy80129

jake 发表于 2013-9-24 16:40
cron是linux的定时服务,可以在随便一台linux上面设置。它也会定时执行php。

关于你说的扫描时间间隔问题 ...
嗯嗯~不好意思,刚刚开始接解PHP~确实很多东西都不懂。。请多指教~
整理了点东西,您看看,这样的思路对吗?或有别的更好的方法?


function check($$$$host, $$$$find)
{
$$$$fp = fsockopen($$$$host, 80, $$$$errno, $$$$errstr, 10);
if (!$$$$fp)
{
echo "$$$$errstr ($$$$errno)\n";
} else
{
$$$$header = "GET / HTTP/1.1\r\n";
$$$$header .= "Host: $$$$host\r\n";
$$$$header .= "Connection: close\r\n\r\n";
fputs($$$$fp, $$$$header);
while (!feof($$$$fp))
{
$$$$str .= fgets($$$$fp, 1024);
}
fclose($$$$fp);
return (strpos($$$$str, $$$$find) !== false);
}
}

$$$$host = 'www.test.cn'; //下面的网址改成你要监控的网址
$$$$find = '湖北'; //包含的关键字

ignore_user_abort();
//即使Client断开(如关掉浏览器),PHP脚本也可以继续执行.
set_time_limit(0);
//执行时间为无限制,php默认的执行时间是30秒,通过set_time_limit(0)可以让程序无限制的执行下去
$$$$interval=60*5;
//每隔5分钟运行
do{

if (!check($$$$host, $$$$find))
{
echo "error...";
}else{
echo "OK....";
}
sleep($$$$interval);//按设置的时间等待5分钟循环执行
}
while(true);
?>

2013-09-24 17:54:03

#10 jake

可以,

不过改进一下:中间的文件获取部分,可以直接用 file_get_contents(url) 就可以了。

2013-09-24 21:21:10

#11 andy80129

jake 发表于 2013-9-24 21:21
可以,

不过改进一下:中间的文件获取部分,可以直接用 file_get_contents(url) 就可以了。 ...
谢谢,因为刚接触到PHP,很多函数还不知道。之前有查过file_get_contents这个函数~有文章说这个函数在碰到网站当机,取不到文件的时候,会超时~所以改用的fsockopen。也不知道对不对,哪个效率更高?您帮我看看这段代码还有别的问题没有?非常感觉您百忙中能关注到这个贴,耐心的回复。谢谢了~{:soso_e183:}

2013-09-25 08:41:04

#12 jake

andy80129 发表于 2013-9-25 08:41
谢谢,因为刚接触到PHP,很多函数还不知道。之前有查过file_get_contents这个函数~有文章说这个函数在碰 ...
file_get_contents取不到内容,那就是对方网站挂了。其实它底层就是调fopen等函数的。



2013-09-25 09:48:02