Running Duplicati on startup on Freenas / FreeBSD

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)! :slight_smile:

2 Likes