#!/bin/sh ### BEGIN INIT INFO # Provides: calliope # Required-Start: $remote_fs $syslog # Required-Stop: $remote_fs $syslog # Default-Start: 2 3 4 5 # Default-Stop: 1 # Short-Description: Calliope video recorder # Description: Calliope is a system for scheduling and # recording DVB video streams ### END INIT INFO # -*- coding: utf-8 -*- # init.d script for calliope # Based on the init.d script for dbus # Copyright © 2003 Colin Walters # Copyright © 2005 Sjoerd Simons # Copyright © 210 Hugo Mills set -e DAEMON=/usr/local/bin/calliope-server NAME=calliope DAEMONUSER=calliope DAEMONGROUP=dvb PIDDIR=/var/lib/calliope PIDFILE=$PIDDIR/pid DESC="video recorder" test -x $DAEMON || exit 0 . /lib/lsb/init-functions # Source defaults file; edit that file to configure this script. PARAMS="" if [ -e /etc/default/calliope ]; then . /etc/default/calliope fi dependent_services() { # Do nothing if we are called by init [ ! -z $runlevel ] && return # Determine current runlevel r=$(/sbin/runlevel) || true r=${r#*\ } # Do nothing if we can't determine the runlevel (e.g. inside chroots) [ "$r" = "unknown" ] && return if [ "$1" = "stop" ] ; then param="--reverse" action="stop" else param="" action="start" fi # Get the list of services active in this runlevel if [ -d /etc/rc${r}.d/ ] ; then # sysv-rc services=$(grep -s -l "^# Required-Start:.*calliope" /etc/rc${r}.d/S??* | sort $param) elif [ -f /etc/runlevel.conf ] ; then # file-rc list=$(grep -s -l "^# Required-Start:.*calliope" /etc/init.d/* || true) services=$( for i in $list ; do grep -E "^[[:digit:]]{2}[[:space:]]+([0-9,S]+|[-])[[:space:]]+.*$r.*[[:space:]]+$i$" /etc/runlevel.conf done | sort $param | awk '{print $4}' ) else services="" log_warning_msg "Unable to determine dependent services: unknown init system" fi # Start the services in the correct order for i in $services ; do service=$(basename $i) service=${service#S??} invoke-rc.d $service $action || true done } start_it_up() { if [ ! -d $PIDDIR ]; then mkdir -p $PIDDIR chown $DAEMONUSER $PIDDIR chgrp $DAEMONUSER $PIDDIR fi if ! mountpoint -q /proc/ ; then log_failure_msg "Can't start $DESC - /proc is not mounted" return fi if [ -e $PIDFILE ]; then PIDDIR=/proc/$(cat $PIDFILE) if [ -d ${PIDDIR} -a "$(readlink -f ${PIDDIR}/exe)" = "${DAEMON}" ]; then log_success_msg "$DESC already started; not starting." return else log_success_msg "Removing stale PID file $PIDFILE." rm -f $PIDFILE fi fi log_daemon_msg "Starting $DESC" "$NAME" start-stop-daemon --start --quiet --pidfile $PIDFILE \ --background --chuid $DAEMONUSER:$DAEMONGROUP \ --user $DAEMONUSER --exec $DAEMON -- $PARAMS log_end_msg $? dependent_services start } shut_it_down() { dependent_services stop log_daemon_msg "Stopping $DESC" "$NAME" start-stop-daemon --stop --retry 5 --quiet --oknodo --pidfile $PIDFILE \ --user $DAEMONUSER # We no longer include these arguments so that start-stop-daemon # can do its job even given that we may have been upgraded. # We rely on the pidfile being sanely managed # --exec $DAEMON -- --system $PARAMS log_end_msg $? rm -f $PIDFILE } case "$1" in start) start_it_up ;; stop) shut_it_down ;; restart) shut_it_down start_it_up ;; status) status_of_proc -p $PIDFILE $DAEMON $NAME && exit 0 || exit $? ;; *) echo "Usage: /etc/init.d/$NAME {start|stop|restart|status}" >&2 exit 2 ;; esac