预期准备

  1. 一个139邮箱,收到邮件后,可以免费给你短信提醒。如果你不需要短信提醒功能,用什么邮箱都可以
  2. 另外一个可以运行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 监控服务器动态的更多相关文章

  1. HighChartS cpu利用率动态图(Java版)

    来源:http://www.cnblogs.com/haifg/p/3217699.html   最近项目需要监控服务器cpu的利用率,并做成动态图.在网上查找了一些资料,最终选择了HighChart ...

  2. 基于springboot通过注解AOP动态切换druid多数据源--mybatis

    控制于接口之上: 开始:demo地址  在lsr-core-base中 自定义注解: /** * @Description: 数据源切换注解 * @Package: lsr-microservice ...

  3. 一、部署监控服务器--安装LNMP环境

    1.要求: 本案例要求部署-台Zabbix监控服务器, -台被监控主机,为进一步执行具体的监控任务做准备:1.安装LNMP环境2.源码安装Zabbix3.安装监控端主机,修改基本配置4.初始化Zabb ...

  4. iOS可视化动态绘制连通图

    上篇博客<iOS可视化动态绘制八种排序过程>可视化了一下一些排序的过程,本篇博客就来聊聊图的东西.在之前的博客中详细的讲过图的相关内容,比如<图的物理存储结构与深搜.广搜>.当 ...

  5. Dapper逆天入门~强类型,动态类型,多映射,多返回值,增删改查+存储过程+事物案例演示

    Dapper的牛逼就不扯蛋了,答应群友做个入门Demo的,现有园友需要,那么公开分享一下: 完整Demo:http://pan.baidu.com/s/1i3TcEzj 注 意 事 项:http:// ...

  6. Ubuntu 16.10 安装byzanz截取动态效果图工具

    1.了解byzanz截取动态效果图工具 byzanz能制作文件小,清晰的GIF动态效果图,不足就是,目前只能通过输入命令方式来录制. byzanz主要的参数选项有: -d, --duration=SE ...

  7. .Net Core MVC 网站开发(Ninesky) 2.3、项目架构调整(续)-使用配置文件动态注入

    上次实现了依赖注入,但是web项目必须要引用业务逻辑层和数据存储层的实现,项目解耦并不完全:另一方面,要同时注入业务逻辑层和数据访问层,注入的服务直接写在Startup中显得非常臃肿.理想的方式是,w ...

  8. 【开源】.Net 动态脚本引擎NScript

    开源地址: https://git.oschina.net/chejiangyi/NScript 开源QQ群: .net 开源基础服务  238543768 .Net 动态脚本引擎 NScript   ...

  9. Redis的简单动态字符串实现

    Redis 没有直接使用 C 语言传统的字符串表示(以空字符结尾的字符数组,以下简称 C 字符串), 而是自己构建了一种名为简单动态字符串(simple dynamic string,sds)的抽象类 ...

随机推荐

  1. Python基础知识整理

    //占位,缓缓写完 http://www.xuebuyuan.com/2117676.html 迭代器与生成器http://www.cnblogs.com/wilber2013/p/4652531.h ...

  2. Python【2】-列表和元组

    一.序列 python包含六种内建的序列:列表.元组.字符串.unicode字符串.buffer对象.xrange对象. 列表可以修改,元组是不能修改的. 二.列表 列表list是变长序列,其中的内容 ...

  3. [转]搭建高可用mongodb集群(二)—— 副本集

    在上一篇文章<搭建高可用MongoDB集群(一)——配置MongoDB> 提到了几个问题还没有解决. 主节点挂了能否自动切换连接?目前需要手工切换. 主节点的读写压力过大如何解决? 从节点 ...

  4. 5、HTML5列表、块和布局

    1.块元素 块元素在显示的时候,通常会以新行开始 如:<h1> <p> <ul> <!-- 块—>注释 <p>hello</p> ...

  5. github上面建立分支

    首先是有一个github的账户,然后随便开个项目. 好了,现在把git命令行打开,输入下面几行代码. git clone https://github.com/user/repository.git ...

  6. 【资讯】天啦鲁,这十余款创客设计居然由FPGA搞定 [转]

    按理说‘高大上’的FPGA,多出现在航天航空(如火星探测器).通信(如基站.数据中心).测试测量等高端应用场景.但麦迪却也发现,近期,在很多创客的作品内部都有FPGA的影子.这或许也从侧面看出,打从总 ...

  7. map 取值

    1>可以取出Map中所有的键所在的Set集合:再通过Set的迭代器获取到每一个键,之后再用get();方法获得对应的值. public static void main(String[] arg ...

  8. C# ADO.NET 连接Sybase 数据库

    using Sybase.Data.AseClient;//反编译修改后的DLL public class SybaseHelper { public AseConnection con; publi ...

  9. ubuntu 使用中的一些问题汇总

    1.IOError: [Errno 13] Permission denied /usr/local…… 这个错误是在terminal中运行pip install 时产生的,说的时没有权限运行安装包, ...

  10. EasyUI之加载js文件顺序

    在使用EasyUI时,需要引用EasyUI框架的js文件,要注意加载的顺序,jquery.min.js一定要第一个被加载.