Passing variable in init.d script

9,335

If you don't want to modify the init.d script, change (or create)

/etc/default/tvheadend

as steeldriver pointed out in his comment, edit (add, extend) the entry:

TVH_HTTP_ROOT=/tv

This file gets sourced in the init.d script, with this line:

[ -r /etc/default/$NAME ] && . /etc/default/$NAME

and then

[ -z "$TVH_HTTP_ROOT" ] || ARGS="$ARGS --http_root $TVH_HTTP_ROOT"

will set the argument to the daemon invocation.

Otherwise you can also just change the line.

ARGS="-f"

in the script to

ARGS="-f --http_root /tv"

But that gets overwritten on a package update.

Share:
9,335

Related videos on Youtube

Tom Kelly
Author by

Tom Kelly

Updated on September 18, 2022

Comments

  • Tom Kelly
    Tom Kelly almost 2 years

    I have the init.d script show below.

    I want to start the daemon with the argument

    --http_root /tv
    

    When I start the application without the daemon the argument is accepted

    However I cannot seem to figure out how to adjust the script below to start the daemon with that argument. I want the argument to be passed every time

    sudo service tvheadend start
    

    is issued. I do not want to pass an argument to the init.d script.

    How can I achieve that?

    #! /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
    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
    
    # Configure command line options
    [ "$TVH_ENABLED" = "1" ] || exit 0
    
    ARGS="-f"
    [ -z "$TVH_USER"      ] || ARGS="$ARGS -u $TVH_USER"
    [ -z "$TVH_GROUP"     ] || ARGS="$ARGS -g $TVH_GROUP"
    [ -z "$TVH_CONF_DIR"  ] || ARGS="$ARGS -c $TVH_CONF_DIR"
    [ -z "$TVH_ADAPTERS"  ] || ARGS="$ARGS -a $TVH_ADAPTERS"
    [ "$TVH_IPV6" = "1"   ] && ARGS="$ARGS -6"
    [ -z "$TVH_HTTP_PORT" ] || ARGS="$ARGS --http_port $TVH_HTTP_PORT"
    [ -z "$TVH_HTTP_ROOT" ] || ARGS="$ARGS --http_root $TVH_HTTP_ROOT"
    [ -z "$TVH_HTSP_PORT" ] || ARGS="$ARGS --htsp_port $TVH_HTSP_PORT"
    [ -z "$TVH_ARGS"      ] || ARGS="$ARGS $TVH_ARGS"
    [ "$TVH_DEBUG" = "1"  ] && ARGS="$ARGS -s"
    
    # 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 -- \
            $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
    
    :
    
  • smw
    smw over 9 years
    Is there any particular reason not to set the TVH_HTTP_ROOT variable directly, rather than modifying TVH_ARGS?
  • Anthon
    Anthon over 9 years
    I actually missed that that already provides the --http_root part (I haven't got this app installed myself), I'll update my answer.