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) {