nixpkgs/pkgs/servers/server-scripts/generic/functions

118 lines
1.8 KiB
Plaintext
Raw Normal View History

#! @bash@/bin/sh -e
## Generic service scripts for NixOS, which provide
## * functions to write state to files (/var/run/nix-services)
## * functions to read state from file (/var/run/nix-services)
## * sanity checking functions
STATEDIR=/var/run/nix-services
RCDIR=/etc/rc.d/
NIXPKGS=@nixpkgs@
## resolve $deps to real start/stop scripts first
start_deps() {
for i in $deps; do
echo $i
name=`$i/control name`
if ! test -a "$RCDIR/$name"; then
echo $RCDIR/$name $i
@nix@/bin/nix-env -p $RCDIR/$name -i $i
fi
$i/control start
RETVAL=$?
if test $RETVAL != 0; then
exit $RETVAL
fi
done
}
start_softdeps() {
for i in $softdeps; do
echo $i
name=`$i/control name`
if ! test -a "$RCDIR/$name"; then
echo $RCDIR/$name $i
@nix@/bin/nix-env -p $RCDIR/$name -i $i
fi
$i/control start
RETVAL=$?
if test $RETVAL != 0; then
continue
fi
done
}
start() {
# are we already running?
# if so, exit with code 0
if test -a $STATEDIR/$prog; then
exit 0
fi
# if not, continue
# launch all hard dependencies
start_deps
RETVAL=$?
if test $RETVAL != 0; then
echo $prog failed
exit $RETVAL
fi
# launch all preferred dependencies
echo "softdeps" $softdeps
start_softdeps
# launch our own program
startService
# if successful, then register
RETVAL=$?
if test $RETVAL != 0; then
echo $prog failed
exit $RETVAL
fi
register
}
stop() {
echo "stopping $prog"
# are we running? If so, then stop, otherwise, do nothing...
if ! test -a $STATEDIR/$prog; then
exit 0
fi
# stop our own program
stopService
echo "unregistering"
unregister
}
register() {
touch $STATEDIR/$prog
}
unregister() {
rm $STATEDIR/$prog
}
status() {
# are we running? If so, report
if test -a $STATEDIR/$prog; then
echo "running"
else
echo "stopped"
fi
}
name() {
echo $prog
}