Project

General

Profile

New setup...how to sudo services tvheadend start/stop?

Added by Kelvin Middleton over 11 years ago

Hi, reasonably new to Ubuntu and very new to TVHeadend but am eager to learn.

First thanks for this great solution, I'm up and running very quickly and finding a lot of the community support/articles very useful. One area I'm a little confused over is the start/stop process...

I've followed the wiki guide and downloaded the source and compiled up to and including the "make install" stage. I'm now happily running via a shell with "sudo tvheadend -f -u myacc"...however I'm used to using a command like "sudo service tvheadend start/stop/restart" and want tvh to run automatically on boot/reboot... I've noted others in the forums have cited having a script in /etc/init.d however none was installed as part of my process and whilst I've copied others init.d scripts I've encountered script errors so unsure as to whether there are pre-cursor steps needed.

Please can someone point me in the right direction?

Thanks,

K


Replies (2)

RE: New setup...how to sudo services tvheadend start/stop? - Added by Mark Kirkpatrick over 11 years ago

It's not as formal as /etc/init.d and the services but a simple way to get by until you locate something is edit /etc/rc.local

Mine I added :
  1. HD Homerun user space driver startup
    /usr/local/bin/userhdhomerun -f > /var/log/dvbhdhomerun_stdout.log 2> /var/log/dvbhdhomerun_stderr.log
  2. TV Headend startup
    /usr/local/bin/tvheadend -f -u root -g video -s -C

RE: New setup...how to sudo services tvheadend start/stop? - Added by Kelvin Middleton over 11 years ago

Hi Mark, thanks for taking the time to review and respond. I located an init.d script from another source so have used that...

cat /etc/init.d/tvheadend
#! /bin/sh
### BEGIN INIT INFO
# Provides:          tvheadend
# Required-Start:    $local_fs $remote_fs udev
# Required-Stop:     $local_fs $remote_fs
# Default-Start:     2 3 4 5
# Default-Stop:      0 1 6
### END INIT INFO

# Author: Andreas Öman

# Do NOT "set -e" 

# PATH should only include /usr/* if it runs after the mountnfs.sh script
PATH=/usr/sbin:/usr/bin:/sbin:/bin
DESC="Tvheadend" 
NAME=tvheadend
#DAEMON=/usr/bin/$NAME
DAEMON=/usr/local/bin/$NAME
#DAEMON_ARGS="-f -u hts -g video" 
DAEMON_ARGS="-f -u _user_ -g video --http_port _customport_ --http_root /tvheadend" 
PIDFILE=/var/run/$NAME.pid
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

# Load the VERBOSE setting and other rcS variables
[ -f /etc/default/rcS ] && . /etc/default/rcS

# Define LSB log_* functions.
# Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
. /lib/lsb/init-functions

#
# Function that starts the daemon/service
#
do_start()
{
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
        udevadm settle
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON --test > /dev/null \
                || return 1
        start-stop-daemon --start --quiet --pidfile $PIDFILE --exec $DAEMON -- \
                $DAEMON_ARGS \
                || return 2
}

#
# Function that stops the daemon/service
#
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 --stop --quiet --retry=TERM/30/KILL/5 --pidfile $PIDFILE --name $NAME
        RETVAL="$?" 
        [ "$RETVAL" = 2 ] && return 2
        # Many daemons don't delete their pidfiles when they exit.
        rm -f $PIDFILE
        return "$RETVAL" 
}

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
        ;;
  restart|force-reload)
        #
        # If the "reload" option is implemented then remove the
        # 'force-reload' alias
        #
        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
        ;;
  *)
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
esac

:
    (1-2/2)