Ok I enhanced this with the ability to stop the service. Also checks to see if the service is already running so it doesn’t attempt to start it again. Maybe this can help out some other people…
#!/bin/bash
#
### BEGIN INIT INFO
# Provides: duplicati
# Required-Start:
# Required-Stop:
# Default-Start: 2 3 4 5
# Default-Stop: 1
# Short-Description: Duplicati
### END INIT INFO
DAEMON=/usr/bin/duplicati-server
DAEMON_PROCESS=DuplicatiServer
NAME=duplicati
PIDFILE=/var/run/$NAME.pid
DESC="Duplicati backup service"
DEFAULT=/etc/default/$NAME
# Use LSB
. /lib/lsb/init-functions
# If we don't have the basics, don't bother
test -x $DAEMON || exit 0
test -f $DEFAULT && . $DEFAULT
running_pid()
{
# Check if a given process pid's cmdline matches a given name
pid=$1
name=$2
[ -z "$pid" ] && return 1
[ ! -d /proc/$pid ] && return 1
cmd=`cat /proc/$pid/cmdline | tr "\000" "\n"|head -n 1 |cut -d : -f 1`
# Is this the expected child?
[ "$cmd" != "$name" ] && return 1
return 0
}
running()
{
# Check if the process is running looking at /proc
# (works for all users)
# No pidfile, probably no daemon present
[ ! -f "$PIDFILE" ] && return 1
# Obtain the pid and check it against the binary name
pid=`cat $PIDFILE`
running_pid $pid $DAEMON_PROCESS || return 1
return 0
}
case "$1" in
start)
log_daemon_msg "Starting $DESC" "$NAME"
if running; then
log_progress_msg "already running"
log_end_msg 0
exit 0
fi
rm -f $PIDFILE
start-stop-daemon --start --quiet --background --make-pidfile --pidfile $PIDFILE --exec $DAEMON -- $DAEMON_OPTS
log_end_msg $?
;;
stop)
log_daemon_msg "Stopping $DESC" "$NAME"
start-stop-daemon --stop --pidfile $PIDFILE
log_end_msg $?
;;
restart|force-reload)
$0 stop
sleep 2
$0 start
;;
*)
N=/etc/init.d/$NAME
echo "Usage: $N {start|stop|restart|force-reload}" >&2
exit 1
;;
esac
exit 0