Run Live Blog as a daemon?
  • I have live Blog running successfully on a remote VPS. The install method of starting the app #python3.2 application.py requires me to maintain my terminal window open with the ssh connection. This is difficult because my home connection is via 3G mobile dongle which has dodgy connectivity.
    Is there a way to run this as a daemon? Maybe create a script in /etc/init.d?
    Any advice or examples would be greatly appreciated.
    Thanks in advance
    Dave
  • 3 Comments sorted by
  • i recommend to use http://supervisord.org/
    we are using it for deployment on testing instances, it have few nice features
    Innovations developer, Sourcefabric
  • and for sysV init it can look like that:

    #! /bin/sh

    ### BEGIN INIT INFO
    # Provides:          liveblog
    # Required-Start:    $remote_fs $syslog $network
    # Required-Stop:     $remote_fs $syslog $network
    # Should-Start:
    # Should-Stop:
    # Default-Start:     2 3 4 5
    # Default-Stop:      0 1 6
    # Short-Description:
    liveblog
    # Description:      
    liveblog
    ### END INIT INFO

    case "$1" in
      start)
        echo "Starting LiveBlog..."
        daemon -n liveblog -r -A 5 -L 60 -X "python3.2 /path/to/your/application.py"
        ;;
      stop)
        daemon -n liveblog --stop
        ;;
      restart)
        /etc/init.d/liveblog stop $2
        /etc/init.d/liveblog start $2
        ;;
      status)
        daemon --running -n liveblog && echo "LiveBlog is running." || echo "LiveBlog is stopped."
      *)
        echo "Usage: $0 start|stop|restart|status" >&2
        exit 3
        ;;
    esac

    exit 0

    Post edited by Yauhen Kirylau at 2015-01-20 07:34:07
    Innovations developer, Sourcefabric
  • Thanks for your help Yauhen. Have sorted it using the skeleton script in /etc/init.d
    My version

    #! /bin/sh
    ### BEGIN INIT INFO
    # Provides:          liveblog
    # Required-Start:    $local_fs $remote_fs
    # Required-Stop:     $local_fs $remote_fs
    # Default-Start:     2 3 4 5
    # Default-Stop:      S 0 1 6
    # Short-Description: Live Blogging Server
    ### END INIT INFO

    # Author: Dave Ashton <admin@blackdoginter.net>

    LIVEBLOG_HOME=/opt/ally-py/live-blog/distribution/



    PATH=/usr/sbin:/usr/bin:/sbin:/bin
    DESC="LiveBlog daemon"
    NAME=liveblog
    LIVEBLOG_OPTS="application.py"
    DAEMON=/usr/bin/python3.2
    PIDFILE=/var/run/$NAME.pid
    SCRIPTNAME=/etc/init.d/$NAME




    DAEMON_ARGS="$LIVEBLOG_HOME$LIVEBLOG_OPTS"

    # 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

    do_start(){
       
        # Return
        #   0 if daemon has been started
        #   1 if daemon was already running
        #   2 if daemon could not be started
       
        start-stop-daemon --start --pidfile $PIDFILE --make-pidfile -b --test --exec $DAEMON $DAEMON_ARGS > /dev/null || return 1
           
        start-stop-daemon --start --pidfile $PIDFILE --make-pidfile -b --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 --stop --pidfile  $PIDFILE \
            --user $USER \
            --retry=TERM/30/KILL/5

        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)
        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|reload|force-reload}" >&2
        echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
        exit 3
        ;;
    esac

    Zipped version of file attached
    Regards
    Dave
    :