Запуск WebDAV-сервера dave в NetBSD с помощью daemontools

Установим в систему пакет, собранный из pkgsrc:

# pkgin -y install dave

Создадим группу и пользователя dave, от имени которого будет работать будущий сервис:

# groupadd dave2
# useradd -s /sbin/nologin -d /nonexistent -c 'Simple WebDAV server' -g dave dave

Создадим каталог сервиса, пока что скрытый:

# mkdir -p /service/.dave/log/

В каталоге /service/.dave/ создадим скрипт run для запуска сервиса со следующим содержимым:

#!/bin/sh

exec 2>&1

if [ ! -f /usr/pkg/etc/dave.conf ] ; then
        echo "Missing /usr/pkg/etc/dave.conf"
        exit 1
fi

exec \
setuidgid dave \
/usr/pkg/sbin/dave -config /usr/pkg/etc/dave.conf

И создадим в каталоге /service/.dave/log/ скрипт run для сбора журналов сервиса:

#!/bin/sh

exec \
setuidgid multilog \
multilog t /var/log/dave/

Добавим права на выполнеине скриптов:

# chmod +x /service/.dave/run
# chmod +x /service/.dave/log/run

Создадим каталог для журналов сервиса и выставим права доступа к нему:

# mkdir -p /var/log/dave/
# chown multilog:multilog /var/log/dave/

Для запуска сервиса переименуем каталог, поменяв его имя со скрытого на видимое:

# mv /service/.dave /service/dave

Совместимость с rc

Для совместимости с системой инициализации /etc/rc создадим скрипт /etc/rc.d/dave со следующим содержимым:

#!/bin/sh

# REQUIRE: DAEMON
# PROVIDE: dave

if [ -f /etc/rc.subr ]; then
        . /etc/rc.subr
fi

name=dave
rcvar=$name

load_rc_config $name
if checkyesno $rcvar ; then
        rm -f /service/$name/down
else
        touch /service/$name/down
fi

status_cmd="/usr/pkg/bin/svstat /service/$name/ | sed -e 's,^/service/\(.*\)/: up (\(pid .*\)).*$,\1 is running as \2.,g; s,^/service/\(.*\)/: down .*,\1 is not running.,g'"
start_cmd="/usr/pkg/bin/svc -u /service/$name/ ; echo 'Starting $name.'"
stop_cmd="/usr/pkg/bin/svc -d /service/$name/ ; echo 'Stopping $name.'"
restart_cmd="/usr/pkg/bin/svc -du /service/$name/ ; echo 'Restarting $name.'"
extra_commands="status"

run_rc_command "$1"

После создания файла нужно добавить права на его выполнение:

# chmod +x /etc/rc.d/dave

Теперь можно будет включать и выключать сервис dave привычным образом через переменную dave в файле /etc/rc.conf, а также запускать, останавливать, перезапускать и проверять состояние сервиса с помощью скрипта /etc/rc.d/dave.