1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183
|
#! /bin/sh
### BEGIN INIT INFO
# Provides: deejayd
# Required-Start: $local_fs $remote_fs
# Required-Stop: $local_fs $remote_fs
# Should-Start: alsa-utils
# Should-Stop: alsa-utils
# Default-Start: 2 3 4 5
# Default-Stop: 0 1 6
# Short-Description: Launch deejayd media player daemon.
# Description: Prepare environement and launch the deejayd music player
# daemon.
### END INIT INFO
# Author: Alexandre Rossi <alexandre.rossi@gmail.com>
# Do NOT "set -e"
# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="Deejayd media player daemon"
NAME=deejayd
DAEMON=/usr/bin/$NAME
DAEMON_USER=$NAME
HOME=/var/lib/$DAEMON_USER
PIDFILE=/var/run/$NAME.pid
LOGFILE=/var/log/$NAME.log
WEBUI_LOGFILE=/var/log/$NAME-webui.log
SCRIPTNAME=/etc/init.d/$NAME
# Exit if the package is not installed
[ -x "$DAEMON" ] || exit 0
# Read configuration variable file if it is present
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
DAEMON_ARGS="-u $DAEMON_USER -g audio,cdrom,video -p $PIDFILE -l $LOGFILE -w $WEBUI_LOGFILE $DEEJAYD_DAEMON_OPTS"
# Create logfiles if they do not exist
for FILE in "$LOGFILE" "$WEBUI_LOGFILE"
do
if [ ! -r "$FILE" ]
then
touch $FILE
chown deejayd:adm $FILE
fi
done
# If X method is managed by Deejayd scripts (not "off"), create, if it does not
# exist, a dummy auth file with appropriate permissions:
# - for the user that starts X to be able to load auth cookies in it in
# "reuse" mode,
# - and for users in the 'video' group to be able to contact the X server
# in "standalone" mode.
if [ ! -z "$DEEJAYD_XSERVER_METHOD" ] &&\
[ "$DEEJAYD_XSERVER_METHOD" != "off" ]; then
export XAUTHORITY=$DEEJAYD_XAUTHORITY
if [ ! -e "$DEEJAYD_XAUTHORITY" ]; then
# Just create a dummy auth file to make it have to appropriate file
# permissions.
touch $DEEJAYD_XAUTHORITY
chgrp video $DEEJAYD_XAUTHORITY && chmod 640 $DEEJAYD_XAUTHORITY
if [ "$DEEJAYD_XSERVER_METHOD" = "reuse" ]; then
chmod g+w $DEEJAYD_XAUTHORITY
fi
fi
fi
# Load the VERBOSE setting and other rcS variables
. /lib/init/vars.sh
# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions
do_start()
{
# Return
# 0 if daemon has been started
# 2 if daemon could not be started
is_alive && return 0
start-stop-daemon --start --pidfile $PIDFILE --exec $DAEMON -- \
$DAEMON_ARGS \
|| return 2
}
do_stop()
{
# Return
# 0 if daemon has been stopped
# 1 if daemon was already stopped
# 2 if daemon could not be stopped
# other if a failure occurred
start-stop-daemon --user $DAEMON_USER --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
RETVAL="$?"
[ "$RETVAL" = 2 ] && return 2
start-stop-daemon --user $DAEMON_USER --stop --quiet --oknodo --retry=0/30/KILL/5 --exec $DAEMON
[ "$?" = 2 ] && return 2
rm -f $PIDFILE
return "$RETVAL"
}
do_reload() {
#
# If the daemon can reload its configuration without
# restarting (for example, when it is sent a SIGHUP),
# then implement that here.
#
start-stop-daemon --user $DAEMON_USER --stop --signal 1 --quiet --pidfile $PIDFILE --name $NAME
return 0
}
is_alive () {
ret=1
if [ -r $PIDFILE ] ; then
pid=`cat $PIDFILE`
if [ -e /proc/$pid ] ; then
procname=`/bin/ps h -p $pid -C $NAME`
[ -n "$procname" ] && ret=0
fi
fi
return $ret
}
case "$1" in
start)
[ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME"
do_start
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
stop)
[ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME"
do_stop
case "$?" in
0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
esac
;;
reload|force-reload)
log_daemon_msg "Reloading $DESC" "$NAME"
do_reload
log_end_msg $?
;;
restart)
log_daemon_msg "Restarting $DESC" "$NAME"
do_stop
case "$?" in
0|1)
do_start
case "$?" in
0) log_end_msg 0 ;;
1) log_end_msg 1 ;; # Old process is still running
*) log_end_msg 1 ;; # Failed to start
esac
;;
*)
# Failed to stop
log_end_msg 1
;;
esac
;;
status)
echo -n "Status of $DESC: "
if is_alive ; then
echo "alive."
else
echo "dead."
exit 1
fi
;;
*)
echo "Usage: $SCRIPTNAME {start|stop|restart|reload|force-reload|status}" >&2
exit 3
;;
esac
:
# vim: ts=4 sw=4 expandtab
|