PHP 监控服务器动态
预期准备
- 一个139邮箱,收到邮件后,可以免费给你短信提醒。如果你不需要短信提醒功能,用什么邮箱都可以
- 另外一个可以运行PHP文件的Web服务器(相当于监控服务器),现在免费的PHP网站空间很多,上网搜搜。如果将PHP监控文件放到你自己的服务器上,这个监控文件也就等于摆设,服务器挂掉了,它也无法运行了,怎么能起到监控作用呢?
创建监控文件
打开你喜欢的文本编辑器,新建一个PHP文件,命名为monitor.php。这部分代码也很简单,就是两个函数,一个用于测试服务器是否可以访问,另一个用于给你发送邮件通知
复制粘贴以下代码至monitor.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);
}
} function alert($host)
{
/* 下面的youremail@139.com改成你的邮箱地址 */
mail('youremail@139.com', 'Monitoring', $host.' down');
} /* 下面的网址改成你要监控的网址 */
$host = 'www.ludou.org'; /* 下面的ludou.org改成你的网站首页源代码中的一段特殊字符串 */
$find = 'ludou.org'; if (!check($host, $find))
alert($host); ?>
第一个函数check(),需要传递两个参数:第一$host是你想要监控的网站(如:www.ludou.org);第二个$find用于查找你的网站首页源代码中的一段字符串,其实添加这个的目的是出于安全考虑,如果你的首页包含这段字符串,说明你的网页没有被修改(如:被骇客恶意修改)。
如果你的网站无法访问或者安全字符串找不到,将会运行alert()函数,给你发送告警邮件。请确保你的监控主机可以正常使用PHP的发送邮件函数mail(),否则将无法发送邮件,替代方法是使用phpmailer
好了,保存monitor.php,并上传至你的监控服务器上。
设置一个计划任务
现在问题又来了,要想让monitor.php运行,我们得在浏览器中打开http://mymonitoringserver.com/monitor.php才能检测服务器状态,这样的监控也等于白搭。
解决这个问题的办法是使用计划任务(Cron Job),大多数虚拟主机都提供了这个功能,它可以在你设定的时刻自动地运行php脚本(例如每小时运行一次monitor.php),关于计划任务的设定可根据各人的主机来设定,遇到问题可以联系主机的客服。
设定好计划任务的运行时间间隔,还要设置计划任务的命令,这里提供一条样例:lynx > /dev/null -dump http://mymonitoringserver.com/monitor.php
如
果你的主机不提供计划任务(Cron
Job)的功能,这里给你推荐一个免费提供计划任务的网站,http://www.setcronjob.com/,申请一个账号,进行简单的设置就可以
免费使用计划任务功能了。这里是一个功能预览,可以先练练手http://www.setcronjob.com/cp.php
后记
到
此本教程就结束,是不是感觉特麻烦呢?这么多代码,这么多设置,太麻烦了吧?确实有点,但是上面提供的是一种方法,一种原理,了解了解,练练手也没什么大
不了的。其实有很多网站提供免费的网站监控功能,只需输入网址和邮箱地址就可以帮你监控网站了,你知道的话,能否给推荐个?
PHP 监控服务器动态的更多相关文章
- HighChartS cpu利用率动态图(Java版)
来源:http://www.cnblogs.com/haifg/p/3217699.html 最近项目需要监控服务器cpu的利用率,并做成动态图.在网上查找了一些资料,最终选择了HighChart ...
- 基于springboot通过注解AOP动态切换druid多数据源--mybatis
控制于接口之上: 开始:demo地址 在lsr-core-base中 自定义注解: /** * @Description: 数据源切换注解 * @Package: lsr-microservice ...
- 一、部署监控服务器--安装LNMP环境
1.要求: 本案例要求部署-台Zabbix监控服务器, -台被监控主机,为进一步执行具体的监控任务做准备:1.安装LNMP环境2.源码安装Zabbix3.安装监控端主机,修改基本配置4.初始化Zabb ...
- iOS可视化动态绘制连通图
上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...
- Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示
Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...
- Ubuntu 16.10 安装byzanz截取动态效果图工具
1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...
- .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入
上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...
- 【开源】.Net 动态脚本引擎NScript
开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务 238543768 .Net 动态脚本引擎 NScript ...
- Redis的简单动态字符串实现
Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...
随机推荐
- windows下安装MongoDB要注意的问题
1. errno:10061 由于目标计算机积极拒绝,无法连接. 解决方法:在mongoDB的bin目录下,打开命令行,输入: mongod --dbpath "c:\data\db&qu ...
- F2工作流引擎之组织用户模型(四)
1 概述 工作流组织模型是工作流引擎中核心重要的一部份,是实现人机交互中不可或缺的组成部分,而由于工作流引擎需要适应不同的系统之间存在组织用户结构的不同, 如组织表中字段名不同,所以需要实现适应不同系 ...
- (转)redis 3.0的集群部署
一:关于redis cluster 1:redis cluster的现状 reids-cluster计划在redis3.0中推出,可以看作者antirez的声明:http://antirez.com/ ...
- daydayup2 codeforces143D
这题很考察分析 题意:让你构造n*m的矩阵,使得不存在两个点的距离的平方为5 1若n=1 ,答案为m 2若m=1,答案为n 3若n=2 则这样 110011001100.. 110011001100 ...
- lnmp 设置ci pathinfo和去掉index.php
LNMP上各个版本pathinfo各个版本的设置基本一样: lnmp v1.1上,修改对应虚拟主机的配置文件去掉#include pathinfo.conf前面的#,把try_files $uri = ...
- Java Mysql分页显示
public class View { private int currentPage; private int pageSize; private int recordCount; public V ...
- C++小项目:directx11图形程序(六):cameraclass
cameraclass是一个相机类,它的作用是生成非常重要的观察矩阵.本小节涉及到一点数学知识,相对前面需要只是填充,调用,算是比较有趣的吧. cameraclass.h #pragma once # ...
- 用jQuery Mobile做HTML5移动应用的三个优缺点
JQuery Mobile 和 HTML5 的 3个优点 1. 上手迅速并支持快速迭代:在一个星期多一点的时间里,通过阅读JQuery Mobile文档以及O’Reilly出版的JQuery Mobi ...
- int->string-------------c
void intToString(int n,char a[]){ int i=1,m=n; while((n/=10)!=0) i++; int j=0; for(;j<i;j++){ a ...
- JavaScript toFixed 用法
在JS中进行乘法运算时 我们又是会遇到一下情况 <input type="text" id="num1" value="" /> ...