background image

  if(!$fp || !flock($fp  

, LOCK_EX | LOCK_NB)) {

  fputs(STDERR  

, "Failed to acquire lock\n");

  exit;
  }
  /*成功锁定以安全地执行工作*/
  注意,有关锁机制的讨论涉及较多内容,在此不多加解释。
  四. 构建监视服务
  在这一节中,我们将使用 PHP 来编写一个基本的监视引擎。因为你不会事先知道怎
样改变,所以你应该使它的实现既灵活又具可能性。
  该记录程序应该能够支持任意的服务检查(例如,HTTP 和 FTP 服务)并且能够以任意
方式(通过电子邮件,输出到一个日志文件,等等)记录事件。你当然想让它以一个守护程
序方式运行;所以,你应该请求它输出其完整的当前状态。
  一个服务需要实现下列抽象类:
  abstract class ServiceCheck {
  const FAILURE = 0;
  const SUCCESS = 1;
  protected $timeout = 30;
  protected $next_attempt;
  protected $current_status = ServiceCheck::SUCCESS;
  protected $previous_status = ServiceCheck::SUCCESS;
  protected $frequency = 30;
  protected $description;
  protected $consecutive_failures = 0;
  protected $status_time;
  protected $failure_time;
  protected $loggers = array();
  abstract public function __construct($params);
  public function __call($name  

, $args)

  {
  if(isset($this->$name)) {
  return $this->$name;
  }
  }
  public function set_next_attempt()
  {
  $this->next_attempt = time() + $this->frequency;
  }
  public abstract function run();
  public function post_run($status)
  {
  if($status !== $this->current_status) {
  $this->previous_status = $this->current_status;
  }
  if($status === self::FAILURE) {