1*00b67f09SDavid van Moolenbroek#!/usr/bin/perl 2*00b67f09SDavid van Moolenbroek# 3*00b67f09SDavid van Moolenbroek# Copyright (C) 2004, 2007, 2012, 2014 Internet Systems Consortium, Inc. ("ISC") 4*00b67f09SDavid van Moolenbroek# Copyright (C) 2000, 2001 Internet Software Consortium. 5*00b67f09SDavid van Moolenbroek# 6*00b67f09SDavid van Moolenbroek# Permission to use, copy, modify, and/or distribute this software for any 7*00b67f09SDavid van Moolenbroek# purpose with or without fee is hereby granted, provided that the above 8*00b67f09SDavid van Moolenbroek# copyright notice and this permission notice appear in all copies. 9*00b67f09SDavid van Moolenbroek# 10*00b67f09SDavid van Moolenbroek# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH 11*00b67f09SDavid van Moolenbroek# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY 12*00b67f09SDavid van Moolenbroek# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT, 13*00b67f09SDavid van Moolenbroek# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM 14*00b67f09SDavid van Moolenbroek# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE 15*00b67f09SDavid van Moolenbroek# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR 16*00b67f09SDavid van Moolenbroek# PERFORMANCE OF THIS SOFTWARE. 17*00b67f09SDavid van Moolenbroek 18*00b67f09SDavid van Moolenbroek# Id: nanny.pl,v 1.11 2007/06/19 23:47:07 tbox Exp 19*00b67f09SDavid van Moolenbroek 20*00b67f09SDavid van Moolenbroek# A simple nanny to make sure named stays running. 21*00b67f09SDavid van Moolenbroek 22*00b67f09SDavid van Moolenbroek$pid_file_location = '/var/run/named.pid'; 23*00b67f09SDavid van Moolenbroek$nameserver_location = 'localhost'; 24*00b67f09SDavid van Moolenbroek$dig_program = 'dig'; 25*00b67f09SDavid van Moolenbroek$named_program = 'named'; 26*00b67f09SDavid van Moolenbroek 27*00b67f09SDavid van Moolenbroekfork() && exit(); 28*00b67f09SDavid van Moolenbroek 29*00b67f09SDavid van Moolenbroekfor (;;) { 30*00b67f09SDavid van Moolenbroek $pid = 0; 31*00b67f09SDavid van Moolenbroek open(FILE, $pid_file_location) || goto restart; 32*00b67f09SDavid van Moolenbroek $pid = <FILE>; 33*00b67f09SDavid van Moolenbroek close(FILE); 34*00b67f09SDavid van Moolenbroek chomp($pid); 35*00b67f09SDavid van Moolenbroek 36*00b67f09SDavid van Moolenbroek $res = kill 0, $pid; 37*00b67f09SDavid van Moolenbroek 38*00b67f09SDavid van Moolenbroek goto restart if ($res == 0); 39*00b67f09SDavid van Moolenbroek 40*00b67f09SDavid van Moolenbroek $dig_command = 41*00b67f09SDavid van Moolenbroek "$dig_program +short . \@$nameserver_location > /dev/null"; 42*00b67f09SDavid van Moolenbroek $return = system($dig_command); 43*00b67f09SDavid van Moolenbroek goto restart if ($return == 9); 44*00b67f09SDavid van Moolenbroek 45*00b67f09SDavid van Moolenbroek sleep 30; 46*00b67f09SDavid van Moolenbroek next; 47*00b67f09SDavid van Moolenbroek 48*00b67f09SDavid van Moolenbroek restart: 49*00b67f09SDavid van Moolenbroek if ($pid != 0) { 50*00b67f09SDavid van Moolenbroek kill 15, $pid; 51*00b67f09SDavid van Moolenbroek sleep 30; 52*00b67f09SDavid van Moolenbroek } 53*00b67f09SDavid van Moolenbroek system ($named_program); 54*00b67f09SDavid van Moolenbroek sleep 120; 55*00b67f09SDavid van Moolenbroek} 56