Quoth Andrew Reilly <[email protected]>:
> 
> So: does anyone know how to modify the boot-time order so that
> svscan starts at (or before) the point in the boot cycle where
> BIND would, on other systems?  I suspect that it should be
> possible by changing the PROVIDE: in svscan.sh to include one of
> the things REQUIRE:'d by ntpd.  Or perhaps the REQUIRE: LOGIN in
> svscan.sh is incompatible with the BEFORE: LOGIN in ntpd?
> 
> Has any other user of dnscache encountered and solved this
> problem?

I have, in my svscan.sh,

    # PROVIDE: svscan
    # REQUIRE: SERVERS cleanvar

and I also have a /usr/local/etc/rc.d/dnscache which looks like

    #!/bin/sh

    # PROVIDE: named
    # REQUIRE: svscan

    . /etc/rc.subr
    . /usr/local/etc/svc.subr

    name="dnscache"
    rcvar=`set_rcvar`

    : ${dnscache_enable:="NO"}

    load_rc_config $name
    load_svc_subr_config

    run_rc_command "$1"

and a /usr/local/etc/svc.subr as attached. It's somewhat more general
than is needed for dnscache, as I also use it to start qmail.

Basically: the PROVIDE: named line is needed to get dnscache up before
ntpd, and the REQUIRE: LOGIN line needs to be changed.

Ben

#
# Subroutines for handling services under the control of svscan(8).
# Requires rc.subr is loaded first.
#

load_svc_subr_config () {
        load_rc_config_var svscan svscan_servicedir

        : ${svscan_servicedir:=/var/service}
        : ${svc:=/usr/local/bin/svc}
        : ${svok:=/usr/local/bin/svok}
        : ${svstat:=/usr/local/bin/svstat}

        : ${svcname:=${name}}   
        : ${service_dir:=${svscan_servicedir}/${svcname}}
        : ${svok_timeout:=30}
        : ${svstat_timeout:=30}

        : ${start_cmd:=svc_subr_start}
        : ${stop_cmd:=svc_subr_stop}
        : ${restart_cmd:=svc_subr_restart}

        : ${extra_commands:="status reload flush"}
        : ${status_cmd:=svc_subr_status}
        : ${reload_cmd:=svc_subr_reload}
        : ${flush_cmd:=svc_subr_flush}
}

svc_subr_isup () {
        $svstat $1 | grep -q ": up"
}

svc_subr_isdown () {
        $svstat $1 | grep -q ": down"
}

svc_subr_waitfor () {
        local n check timeout err

        check="$1"
        timeout=$2
        err="$3"

        n=0
        while [ $n -lt $timeout ] && ! $check $service_dir
        do
                sleep 1
                n=$(( n + 1 ))
        done

        if ! $check $service_dir
        then
                echo "$err" >&2
                exit 1
        fi
}

svc_subr_start () {

        echo -n "Checking ${name} is up"

        svc_subr_waitfor $svok $svok_timeout \
                "supervise is not running in ${service_dir}!"

        $svc -u $service_dir

        svc_subr_waitfor svc_subr_isup $svstat_timeout \
                "${service_dir} won't come up!"

        echo "."
}

svc_subr_stop () {

        echo -n "Bringing ${name} down"

        $svc -d $service_dir

        svc_subr_waitfor svc_subr_isdown $svstat_timeout \
                "${service_dir} won't come down, trying SIGKILL"

        svc -k $service_dir

        svc_subr_waitfor svc_subr_isdown $svstat_timeout \
                "${service_dir} won't come down!"

        echo "."
}

svc_subr_restart () {
        echo -n "Sending ${name} a SIGTERM"
        $svc -t $service_dir
        echo "."
}

svc_subr_reload () {
        echo -n "Sending ${name} a SIGHUP"
        $svc -h $service_dir
        echo "."
}

svc_subr_flush () {
        echo -n "Sending ${name} a SIGALRM"
        $svc -a $service_dir
        echo "."
}

svc_subr_status () {
        $svstat $service_dir
}
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-stable
To unsubscribe, send any mail to "[email protected]"

Reply via email to