freebsd-ports/sysutils/daemontools/files/svscan.sh.sample
Peter Pentchev fd6405d10d Add a knob to disable the run-time testsuite, e.g. when building with
a NFS-mounted work directory (prompted by PR 115100).
Add support for logging through multilog instead of readproctitle for
the main svscan process and document the startup script variables
(loosely based on PR 111749).

PR:		111749, 115100
Submitted by:	Andrew Hammond<andrew.george.hammond@gmail.com>,
		Charles Sprickman <spork@bway.net>
2007-10-30 10:49:16 +00:00

100 lines
3.3 KiB
Bash

#!/bin/sh
#
# $FreeBSD$
#
# PROVIDE: svscan
# REQUIRE: LOGIN
# Define these svscan_* variables in one of these files:
# /etc/rc.conf
# /etc/rc.conf.local
# /etc/rc.conf.d/svscan
#
# svscan_enable Set to "YES" to run svscan.
# svscan_servicedir The directory containing the various service.
# directories to be monitored. Professor Daniel J.
# Bernstein recomments "/service", but the FreeBSD
# port has a default of "/var/service" instead, which
# is consistent with the FreeBSD filesystem hierarchy
# guidelines as described in the hier(7) manual page.
# svscan_logdir If set, then svscan will not log its output through
# readproctitle, but through multilog instead, and
# the logs will be placed in the specified directory.
# The FreeBSD port default is to run svscan through
# readproctitle.
# svscan_lognum The number of logfiles that multilog will keep if
# svscan_logdir is set; the multilog default is 10.
# svscan_logmax The maximum logfile size for multilog if svscan_logdir
# is set; the multilog default is 99999.
# It would really, really be a Good Thing(tm) for you to enable some
# of the below control variables and the apropriate ulimit.
# These are only examples.
# Furthermore, you should think about additional limits you might need.
# Or, check login.conf(5) for a suitable alternative.
# If you want to use these examples, please place into /etc/rc.conf.d/svscan.
#
# I really do suggest you use /var/service as your service spool directory.
# Check hier(7) for reasons.
# 10 Mb
#MINSEGMENT=10240
# 20 Mb
#MAXSEGMENT=20480
# 10 Mb
#MAXFILESIZE=10240
# 100
#MAXFD=100
# 40
#MAXCHILD=40
# ulimits
#ulimit -d ${MINSEGMENT}
#ulimit -f ${MAXFILESIZE}
#ulimit -m ${MAXSEGMENT}
#ulimit -n ${MAXFD}
#ulimit -s ${MINSEGMENT}
#ulimit -u ${MAXCHILD}
. %%RC_SUBR%%
name="svscan"
rcvar=`set_rcvar`
command="%%PREFIX%%/bin/svscan"
#
# DO NOT CHANGE THESE DEFAULT VALUES HERE
#
svscan_enable=${svscan_enable-"NO"}
svscan_servicedir=${svscan_servicedir-"/var/service"}
start_cmd="svscan_start"
stop_postcmd="svscan_stop_post"
load_rc_config $name
required_dirs="${svscan_servicedir}"
if [ -n "${svscan_logdir}" ]; then
required_dirs="${required_dirs} ${svscan_logdir}"
fi
svscan_start () {
echo "Starting svscan."
EP="/usr/bin/env \
PATH=%%PREFIX%%/sbin:%%PREFIX%%/bin:/usr/sbin:/usr/bin:/sbin:/bin"
if [ -z "${svscan_logdir}" ]; then
${EP} %%DAEMON%% /bin/sh -c "$command $svscan_servicedir 2>&1 | %%PREFIX%%/bin/readproctitle service errors: ................................................................................................................................................................................................................................................................................................................................................................................................................ &" > /dev/null
else
logmax=${svscan_logmax+s$svscan_logmax}
lognum=${svscan_lognum+n$svscan_lognum}
${EP} %%DAEMON%% /bin/sh -c "$command $svscan_servicedir 2>&1 \
| %%PREFIX%%/bin/multilog t $logmax $lognum '${svscan_logdir}' &" > /dev/null
fi
}
svscan_stop_post () {
find -L "$svscan_servicedir" -mindepth 1 -maxdepth 2 -type d -name '[^.]*' \( \! -path "$svscan_servicedir/*/*" -or -name 'log' \) -print0 | xargs -0 %%PREFIX%%/bin/svc -dx
}
run_rc_command "$1"