--- a +++ b/bin/vt-startstop.sh @@ -0,0 +1,204 @@ +#!/bin/sh +# +# vt-startstop.sh +# +# Starts and stops the programs listed as "run ..." lines in /etc/videotools. +# +# Installed on linux as "/etc/init.d/videotools", with symlinks like +# "/etc/rc2.d/S99videotools". +# +# Directories etc. can be overridden by an optional file "/etc/default/videotools" +# or "/etc/rc.conf.d/videotools". +# +# The "run" directives can have substitution variables for RUNDIR (eg. local +# domain control sockets) and SHAREDIR (eg. recordings and mask files). +# +# See also: install_initd, remove_initd +# +### BEGIN INIT INFO +# Provides: videotools +# Required-Start: $local_fs $network $syslog +# Required-Stop: $local_fs $network $syslog +# Default-Start: 2 3 4 5 +# Default-Stop: 0 1 6 +# Short-Description: Start videotools daemons +### END INIT INFO +# + +PATH=/sbin:/bin:/usr/sbin:/usr/bin +NAME=videotools +DESC=$NAME +CONFIG=/etc/$NAME +IDLEUSER=daemon +GROUP=root +RUNDIR=/var/run/$NAME +PIDDIR=$RUNDIR +SHAREDIR=/usr/share/$NAME +BINDIR=/usr/bin +UMASK=0007 +test -f /etc/default/$NAME && . /etc/default/$NAME +test -f /etc/rc.conf.d/$NAME && . /etc/rc.conf.d/$NAME +test -f /etc/default/rcS && . /etc/default/rcS +log_success_msg() { + echo "$@" +} +log_failure_msg() { + echo "$@" +} +log_warning_msg() { + echo "$@" +} +start_daemon() { + if test "`cat \"$2\" 2>/dev/null`" -gt 0 2>/dev/null && kill -0 "`cat \"$2\"`" + then + : # running + else + shift ; shift ; shift + "$@" + fi +} +killproc() { + shift + kill `cat "$1" 2>/dev/null` 2>/dev/null +} +pidofproc() { + shift + kill -0 `cat "$1" 2>/dev/null` 2>/dev/null +} +log_daemon_msg() { + log_success_msg "$@" +} +log_progress_msg() { + :; +} +log_end_msg() { + if test "$1" -eq 0 ; then log_success_msg "...ok" ; else log_failure_msg "...failed!" ; fi +} +test -f /lib/lsb/init-functions && . /lib/lsb/init-functions + +case $1 in + + restart|force-reload) + $0 stop + $0 start + ;; + + *start) + log_daemon_msg "Starting $DESC services" + + if test ! -d "$RUNDIR" + then + if mkdir "$RUNDIR" 2>/dev/null + then + test -z "$GROUP" || chgrp "$GROUP" "$RUNDIR" 2>/dev/null + chmod 770 "$RUNDIR" + fi + fi + + if test -n "$IDLEUSER" ; then + opt_user="--user $IDLEUSER" + fi + + id=0 + final_status=0 + while read run program args + do + if expr "$run" : '^run' >/dev/null + then + id="`expr $id + 1`" + args="`echo \"$args\" | sed 's:\$RUNDIR:'\"$RUNDIR\"':g'`" + args="`echo \"$args\" | sed 's:\$SHAREDIR:'\"$SHAREDIR\"':g'`" + + pidfile="$PIDDIR/$program-$id.pid" + log_progress_msg "$program-$id" + umask="`umask`" + umask "$UMASK" + start_daemon -p "$pidfile" -- "$BINDIR/$program" --daemon --syslog $opt_user --pid-file "$pidfile" $args + status=$? + umask "$umask" 2>/dev/null + if test "$status" -ne 0 ; then final_status=$status ; fi + fi + done < "$CONFIG" + + if test "$id" = "" + then + logger -- "$0: nothing configured: see $CONFIG" 2>/dev/null + fi + + log_end_msg $final_status + ;; + + stop) + log_daemon_msg "Stopping $DESC services" + final_status=0 + id=0 + while read run program args + do + if expr "$run" : '^run' >/dev/null + then + id="`expr $id + 1`" + pidfile="$PIDDIR/$program-$id.pid" + log_progress_msg "$program-$id" + killproc -p "$pidfile" "$BINDIR/$program" + status=$? + if test "$status" -ne 0 ; then final_status=$status ; fi + fi + done < "$CONFIG" + log_end_msg $final_status + ;; + + status) + list="" + id=0 + while read run program args + do + if expr "$run" : '^run' >/dev/null + then + id="`expr $id + 1`" + pidfile="$PIDDIR/$program-$id.pid" + pidofproc -p "$pidfile" "$BINDIR/$program" >/dev/null + status=$? + if test "$status" -eq 0 ; then + list="$list $program-$id" + fi + fi + done < "$CONFIG" + if test "$list" != "" + then + log_success_msg "$NAME is running$list" + true + else + log_failure_msg "$NAME is not running" + false + fi + ;; + + abort) + for name in alarm webcamserver webcamplayer fileplayer httpclient httpserver maskeditor recorder rtpserver rtspclient socket viewer watcher + do + killall $2 "vt-$name" 2>/dev/null + done + ;; + + setup) + + test -d "$RUNDIR" || mkdir -p "$RUNDIR" 2>/dev/null + chgrp "$GROUP" "$RUNDIR" + chmod 770 "$RUNDIR" + + test -d "$SHAREDIR" || mkdir -p "$SHAREDIR" 2>/dev/null + chgrp "$GROUP" "$SHAREDIR" + chmod 770 "$SHAREDIR" + + chmod 550 $BINDIR/vt-* + chgrp "$GROUP" $BINDIR/vt-* + chmod g+s $BINDIR/vt-* + + ;; + + *) + echo usage: `basename $0` '{start|stop|restart|force-reload|status}' >&2 + exit 2 + ;; +esac +exit 0