Alright, so I took a stab at changing the rc script’s behavior, and it turns out you can just define what happens when you run service foo stop
by defining stop_cmd=baz
and defining
baz() { /bin/pkill -P $(cat ${pidfile}); }
This in turn makes the rc script use that command to kill the process(es).
Voila:
#!/bin/sh
#
# PROVIDE: duplicati
# REQUIRE: LOGIN
# KEYWORD: shutdown
# Enable duplicati:
# sysrc duplicati_enable="YES"
#
# Optional parameters:
# sysrc duplicati_user="<user to run as>"
# sysrc duplicati_data_dir="<folder for server data>"
. /etc/rc.subr
name="duplicati"
rcvar="${name}_enable"
load_rc_config $name
: ${duplicati_enable="NO"}
: ${duplicati_user:="duplicati"}
: ${duplicati_data_dir:="/config"}
duplicati_command_args="--webservice-port=8200 --webservice-interface=any --server-datafolder=${duplicati_data_dir}"
duplicati_command="/usr/local/share/${name}/Duplicati.Server.exe ${duplicati_command_args}"
pidfile="${duplicati_data_dir}/${name}.pid"
procname="/usr/local/bin/mono"
command="/usr/sbin/daemon"
command_args="-f -p ${pidfile} ${procname} ${duplicati_command}"
start_precmd=duplicati_precmd
stop_cmd=duplicati_stopcmd
duplicati_precmd() {
export XDG_CONFIG_HOME=${duplicati_data_dir}
# avoid root user warning
export USER=${duplicati_user}
if [ ! -d ${duplicati_data_dir} ]; then
install -d -o ${duplicati_user} ${duplicati_data_dir}
fi
}
duplicati_stopcmd() { /bin/pkill -P $(/bin/cat ${pidfile}); }
run_rc_command "$1"
Everything works like a charm, and turned out to be (quite) simple.
Thanks for pointing me in the right direction(s)!