olmari

/etc/init.d/octoprint

Sep 9th, 2013
225
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Bash 4.52 KB | None | 0 0
  1. #!/bin/sh
  2. ### BEGIN INIT INFO
  3. # Provides:          octoprint
  4. # Required-Start:    $local_fs $remote_fs
  5. # Required-Stop:     $local_fs $remote_fs
  6. # Should-Start:      $network
  7. # Should-Stop:       $network
  8. # Default-Start:     2 3 4 5
  9. # Default-Stop:      0 1 6
  10. # Short-Description: Octoprint daemon
  11. # Description:       Starts the Octoprint daemon with the user specified in
  12. #                    /etc/default/octoprint.
  13. ### END INIT INFO
  14.  
  15. # Author: Sami Olmari
  16.  
  17. PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
  18. DESC="Octoprint Daemon"
  19. NAME1="octprint"
  20. NAME2="mjpeg-streamer"
  21. DAEMON1=run
  22. DAEMON1_ARGS=""
  23. DAEMON1_HOME=/home/pi/OctoPrint
  24. DAEMON2="mjpg-streamer"
  25. DAEMON2_ARGS="-i \"$MJPEG_STREAMER_HOME/input_uvc.so -r SXGA -f 15\" -o \"$MJPEG_STREAMER_HOME/output_http.so\""
  26. DAEMON2_HOME=/home/pi/mjpg-streamer
  27. PIDFILE1=/var/run/$NAME1.pid
  28. PIDFILE2=/var/run/$NAME2.pid
  29. UMASK=022                     # Change this to 0 if running deluged as its own user
  30. PKGNAME=octoprint
  31. SCRIPTNAME=/etc/init.d/$PKGNAME
  32.  
  33. # Exit if the octoprint is not installed
  34. [ -x "$DAEMON1_HOME/$DAEMON1" ] || exit 0
  35.  
  36. # Read configuration variable file if it is present
  37. [ -r /etc/default/$PKGNAME ] && . /etc/default/$PKGNAME
  38.  
  39. # Load the VERBOSE setting and other rcS variables
  40. [ -f /etc/default/rcS ] && . /etc/default/rcS
  41.  
  42. # Define LSB log_* functions.
  43. # Depend on lsb-base (>= 3.0-6) to ensure that this file is present.
  44. . /lib/lsb/init-functions
  45.  
  46. if [ -z "$RUN_AT_STARTUP" -o "$RUN_AT_STARTUP" != "YES" ]
  47. then
  48.    log_warning_msg "Not starting $PKGNAME, edit /etc/default/$PKGNAME to start it."
  49.    exit 0
  50. fi
  51.  
  52. if [ -z "$OCTOPRINT_USER" ]
  53. then
  54.     log_warning_msg "Not starting $PKGNAME, OCTOPRINT not set in /etc/default/$PKGNAME."
  55.     exit 0
  56. fi
  57.  
  58. #
  59. # Function to verify if a pid is alive
  60. #
  61. is_alive()
  62. {
  63.    pid=`cat $1` > /dev/null 2>&1
  64.    kill -0 $pid > /dev/null 2>&1
  65.    return $?
  66. }
  67.  
  68. #
  69. # Function that starts the daemon/service
  70. #
  71. do_start()
  72. {
  73.    # Return
  74.    #   0 if daemon has been started
  75.    #   1 if daemon was already running
  76.    #   2 if daemon could not be started
  77.  
  78.    is_alive $PIDFILE1
  79.    RETVAL1="$?"
  80.  
  81.    if [ $RETVAL1 != 0 ]; then
  82.        rm -f $PIDFILE1
  83.        start-stop-daemon --start --background --quiet --pidfile $PIDFILE1 --make-pidfile \
  84.        --exec $DAEMON1_HOME/$DAEMON1 --chuid $OCTOPRINT_USER --user $OCTOPRINT_USER --umask $UMASK -- $DAEMON1_ARGS
  85.        RETVAL1="$?"
  86.    else
  87.        is_alive $PIDFILE2
  88.        RETVAL2="$?"
  89.        [ "$RETVAL2" = "0" -a "$RETVAL1" = "0" ] && return 1
  90.    fi
  91.  
  92.    is_alive $PIDFILE2
  93.    RETVAL2="$?"
  94.  
  95.    if [ $RETVAL2 != 0 ]; then
  96.         if [ -x "$DAEMON2_HOME/$DAEMON2" ]; then
  97.         sleep 2
  98.         rm -f $PIDFILE2
  99.         start-stop-daemon --start --background --quiet --pidfile $PIDFILE2 --make-pidfile \
  100.         --exec $DAEMON2 --chuid $DELUGED_USER --user $DELUGED_USER --umask $UMASK -- $DAEMON2_ARGS
  101.         RETVAL2="$?"
  102.         fi
  103.    fi
  104.    [ "$RETVAL1" = "0"  ] || return 2
  105. }
  106.  
  107. #
  108. # Function that stops the daemon/service
  109. #
  110. do_stop()
  111. {
  112.    # Return
  113.    #   0 if daemon has been stopped
  114.    #   1 if daemon was already stopped
  115.    #   2 if daemon could not be stopped
  116.    #   other if a failure occurred
  117.  
  118.    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $OCTOPRINT_USER --pidfile $PIDFILE2
  119.    RETVAL2="$?"
  120.    start-stop-daemon --stop --quiet --retry=TERM/30/KILL/5 --user $OCTOPRINT_USER --pidfile $PIDFILE1
  121.    RETVAL1="$?"
  122.    [ "$RETVAL1" = "2" -o "$RETVAL2" = "2" ] && return 2
  123.  
  124.    rm -f $PIDFILE1 $PIDFILE2
  125.  
  126.    [ "$RETVAL1" = "0" -a "$RETVAL2" = "0" ] && return 0 || return 1
  127. }
  128.  
  129. case "$1" in
  130.   start)
  131.    [ "$VERBOSE" != no ] && log_daemon_msg "Starting $DESC" "$NAME1"
  132.    do_start
  133.    case "$?" in
  134.       0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
  135.       2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  136.    esac
  137.    ;;
  138.   stop)
  139.    [ "$VERBOSE" != no ] && log_daemon_msg "Stopping $DESC" "$NAME1"
  140.    do_stop
  141.    case "$?" in
  142.       0|1) [ "$VERBOSE" != no ] && log_end_msg 0 ;;
  143.       2) [ "$VERBOSE" != no ] && log_end_msg 1 ;;
  144.    esac
  145.    ;;
  146.   restart|force-reload)
  147.    log_daemon_msg "Restarting $DESC" "$NAME1"
  148.    do_stop
  149.    case "$?" in
  150.      0|1)
  151.       do_start
  152.       case "$?" in
  153.          0) log_end_msg 0 ;;
  154.          1) log_end_msg 1 ;; # Old process is still running
  155.          *) log_end_msg 1 ;; # Failed to start
  156.       esac
  157.       ;;
  158.      *)
  159.         # Failed to stop
  160.       log_end_msg 1
  161.       ;;
  162.    esac
  163.    ;;
  164.   *)
  165.    echo "Usage: $SCRIPTNAME {start|stop|restart|force-reload}" >&2
  166.    exit 3
  167.    ;;
  168. esac
  169.  
  170. :
Advertisement
Add Comment
Please, Sign In to add comment