literal name_enable wherever possible, and ${name}_enable when it's not, to prepare for the demise of set_rcvar(). In cases where I had to hand-edit unusual instances also modify formatting slightly to be more uniform (and in some cases, correct). This includes adding some $FreeBSD$ tags, and most importantly moving rcvar= to right after name= so it's clear that one is derived from the other.
175 lines
5.6 KiB
Bash
175 lines
5.6 KiB
Bash
#!/bin/sh
|
|
|
|
# PROVIDE: rubyrep
|
|
# REQUIRE: NETWORKING SERVERS
|
|
# KEYWORD: shutdown
|
|
|
|
# Add the following line to /etc/rc.conf to enable `rubyrep':
|
|
#rubyrep_enable="YES"
|
|
# and be sure to configure (at least)
|
|
# %%PREFIX%%/etc/rubyrep/rubyrep.conf
|
|
#
|
|
# To replicate more than one database, change
|
|
#rubyrep_multi="NO"
|
|
# to "YES". A rubyrep process will be started for each file with
|
|
# .conf suffix in $rubyrep_config_dir.
|
|
#
|
|
# Additional options:
|
|
#
|
|
#rubyrep_stdout_log="/var/log/rubyrep.fifo"
|
|
#rubyrep_stderr_log="/var/log/rubyrep_err.fifo"
|
|
#rubyrep_fifo_logs="YES"
|
|
# Specify log files for stdout and stderr. Defaults to using fifos;
|
|
# actual log file will have the extension .log. Additional PID files
|
|
# will be created for each of the processes used to tap the fifos;
|
|
# these can be used in newsyslog.conf(5) to automate log rotation.
|
|
#
|
|
#rubyrep_config="%%PREFIX%%/etc/rubyrep.conf"
|
|
# Specify full path to default rubyrep configuration file.
|
|
# NOTE: Ignored if $rubyrep_multi is set to "YES"!
|
|
#
|
|
#rubyrep_config_dir="%%PREFIX%%/etc/rubyrep"
|
|
# Specify directory containing config files for rubyrep. Used
|
|
# by $rubyrep_multi, ignored if $rubyrep_multi="NO" (the default).
|
|
#
|
|
#rubyrep_command="replicate"
|
|
# Specify the command to pass to rubyrep. Usually you'll want to
|
|
# replicate (the default), but it is also possible to specify "proxy",
|
|
# "scan" or "sync". Note: This option applies to all databases if
|
|
# $rubyrep_multi="YES"!
|
|
#
|
|
#rubyrep_command_flags=""
|
|
# Specify options to pass to the $rubyrep_command above. For other
|
|
# operating modes than "replicate" this may be necessary, especially
|
|
# if you want useful log output! Run
|
|
# %%prefix%%/bin/rubyrep <command> --help
|
|
# for further information.
|
|
|
|
rubyrep_enable="${rubyrep_enable:-"NO"}"
|
|
rubyrep_multi="${rubyrep_multi:-"NO"}"
|
|
rubyrep_command="${rubyrep_command:-"replicate"}"
|
|
rubyrep_command_flags="${rubyrep_command_flags:-""}"
|
|
rubyrep_config="${rubyrep_config:-"%%PREFIX%%/etc/rubyrep.conf"}"
|
|
rubyrep_config_dir="${rubyrep_config_dir:-"%%PREFIX%%/etc/rubyrep"}"
|
|
rubyrep_user="${rubyrep_user:-"daemon"}"
|
|
rubyrep_stdout_log="${rubyrep_stdout_log:-"/var/log/rubyrep.fifo"}"
|
|
rubyrep_stderr_log="${rubyrep_stderr_log:-"/var/log/rubyrep_err.fifo"}"
|
|
rubyrep_fifo_logs="YES"
|
|
|
|
. /etc/rc.subr
|
|
|
|
checkfifo() {
|
|
# Check and create if necessary fifo special files for logging
|
|
for f in $stdout_log $stderr_log ; do
|
|
flog_fifo=$f
|
|
if [ ! -p "$flog_fifo" ] ; then
|
|
mkfifo $flog_fifo ; chown ${rubyrep_user} $flog_fifo
|
|
fi
|
|
done
|
|
}
|
|
|
|
pid_touch () {
|
|
touch $pidfile
|
|
chown $rubyrep_user $pidfile
|
|
}
|
|
|
|
rubyrep_prestart() {
|
|
pid_touch
|
|
if [ "$rubyrep_fifo_logs"="YES" ] ; then
|
|
umask 027
|
|
checkfifo
|
|
for f in $stdout_log $stderr_log ; do
|
|
flog_fifo=$f
|
|
flog_args=" -t "
|
|
if [ "$cfgname" ] ; then
|
|
local out_log="`dirname $f`/`basename -s .fifo.$cfgname $flog_fifo`.$cfgname.log"
|
|
local out_pid="/var/run/`basename -s .fifo.$cfgname $flog_fifo`.$cfgname.flog.pid"
|
|
else
|
|
local out_log="`dirname $f`/`basename -s .fifo $flog_fifo`.log"
|
|
local out_pid="/var/run/`basename -s .fifo $flog_fifo`.flog.pid"
|
|
fi
|
|
|
|
echo "Enabling logging for $flog_fifo ($out_log, $out_pid)..."
|
|
echo "%%PREFIX%%/bin/flog $flog_args $out_log < $flog_fifo &"
|
|
%%PREFIX%%/bin/flog $flog_args $out_log < $flog_fifo &
|
|
echo $! > $out_pid
|
|
done
|
|
fi
|
|
}
|
|
|
|
rubyrep_stop() {
|
|
if [ -f "$pidfile" ] ; then
|
|
kill -9 `cat $pidfile`
|
|
rm $pidfile
|
|
else
|
|
echo "PID file not found ($pidfile)"
|
|
fi
|
|
}
|
|
|
|
rubyrep_poststop() {
|
|
if [ "$rubyrep_fifo_logs"="YES" ] ; then
|
|
for f in $stdout_log $stderr_log ; do
|
|
flog_fifo=$f
|
|
if [ "$cfgname" ] ; then
|
|
local out_pid="/var/run/`basename -s .fifo.$cfgname $flog_fifo`.$cfgname.flog.pid"
|
|
else
|
|
local out_pid="/var/run/`basename -s .fifo $flog_fifo`.flog.pid"
|
|
fi
|
|
kill $out_pid >/dev/null 2>/dev/null
|
|
rm $out_pid >/dev/null 2>/dev/null
|
|
done
|
|
fi
|
|
}
|
|
|
|
rubyrep_init() {
|
|
if [ "$rubyrep_multi" = "NO" ] ; then
|
|
cmdline="%%PREFIX%%/bin/rubyrep generate $rubyrep_config"
|
|
if [ "$1" = "init" -a -f "$rubyrep_config" ] ; then
|
|
echo "Skipping file $rubyrep_config (already exists)."
|
|
else
|
|
echo "Generating template file $rubyrep_config"
|
|
$cmdline
|
|
fi
|
|
else
|
|
echo 'Command not available when $rubyrep_multi="YES"'.
|
|
exit
|
|
fi
|
|
}
|
|
|
|
name="rubyrep"
|
|
rcvar=rubyrep_enable
|
|
|
|
# read configuration and set defaults
|
|
load_rc_config $name
|
|
|
|
extra_commands="init"
|
|
init_cmd="${name}_init"
|
|
|
|
command="/usr/sbin/daemon"
|
|
start_precmd="${name}_prestart"
|
|
stop_cmd="${name}_stop"
|
|
stop_postcmd="${name}_poststop"
|
|
rubyrep_command_flags="$rubyrep_command_flags"
|
|
|
|
if [ "$rubyrep_multi" = "NO" ] ; then
|
|
stdout_log=${rubyrep_stdout_log}
|
|
stderr_log=${rubyrep_stderr_log}
|
|
log_args=">> ${stdout_log} 2>> ${stderr_log} "
|
|
cmdline="%%PREFIX%%/bin/rubyrep $rubyrep_command $rubyrep_command_flags -c $rubyrep_config"
|
|
pidfile="/var/run/$name.pid"
|
|
flags="-p ${pidfile} ${cmdline} ${log_args}"
|
|
run_rc_command "$1"
|
|
elif [ "$rubyrep_multi" = "YES" ] ; then
|
|
[ ! -d "$rubyrep_config_dir" ] && mkdir -p "$rubyrep_config_dir"
|
|
for i in `ls $rubyrep_config_dir/*.conf` ; do
|
|
rubyrep_config=$i
|
|
cfgname=$(basename -s .conf $i)
|
|
stdout_log=${rubyrep_stdout_log}.$cfgname
|
|
stderr_log=${rubyrep_stderr_log}.$cfgname
|
|
log_args=">> ${stdout_log} 2>> ${stderr_log} "
|
|
cmdline="%%PREFIX%%/bin/rubyrep $rubyrep_command $rubyrep_command_flags -c $rubyrep_config"
|
|
pidfile="/var/run/${name}_${cfgname}.pid"
|
|
flags="-p ${pidfile} ${cmdline} ${log_args}"
|
|
run_rc_command "$1"
|
|
done
|
|
fi
|