#! @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 }