123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259 |
- #!/bin/sh
- # Read our configuration file and set variables
- APPNAME="ewft.minidlna"
- DISPLAYNAME="MiniDLNA"
- PLGCONFFILE="/boot/config/plugins/ewft.minidlna/${APPNAME}.cfg"
- APPCONFFILE="settings.json"
- APPEXECUTABLE="/usr/sbin/minidlnad"
- PIDFILE="/var/run/minidlna/minidlna.pid"
- PLGLOGFILE="/var/log/minidlna/${APPNAME}.log"
- ARRAYSTATE=`grep fsState /var/local/emhttp/var.ini | sed -n 's!fsState="\(.*\)"!\1!p'`
- source "$PLGCONFFILE"
- # This needs to be near the top so the dependency common directory can be set
- app_check_cache() {
- local COMMONVAR="false"
- if [ -e "/mnt/cache" ] && [ -w "/mnt/cache" ]; then
- local CDRIVE=$( stat -f -c '%T' "/mnt/cache" )
- if [ "$CDRIVE" != "ramfs" ] && [ "$CDRIVE" != "tmpfs" ] && [ "$CDRIVE" != "proc" ] && [ "$CDRIVE" != "sysfs" ] && [ "$CDRIVE" != "msdos" ]; then
- COMMONVAR="true"
- fi
- fi
- echo "$COMMONVAR"
- }
- # Check for cache drive and make sure its an actual disk drive
- PHAZECOMMON="/usr/local/PhAzE-Common"
- COMMONCHECK=`app_check_cache`
- [ "$COMMONCHECK" == "true" ] && PHAZECOMMON="/mnt/cache/.PhAzE-Common"
- STARTFILE="$PHAZECOMMON/${APPNAME}/startcfg.sh"
- app_start() {
- # Get array status and exit if not started
- if [ "$ARRAYSTATE" != "Started" ]; then
- app_logger "Starting $DISPLAYNAME..." info all
- app_logger "Start failed: Array stopped " warn all
- return
- fi
- # Set service to enabled
- [ "$SERVICE" != "enable" ] && sed -i 's/disable/enable/' "$PLGCONFFILE"
- # No-op if already running and install if not installed
- local STATUS=`app_status`
- if [ "$STATUS" == "RUNNING" ]; then
- app_logger "Starting $DISPLAYNAME..." info all
- app_logger "Start OK: Already running " info all
- return
- else
- app_logger "Starting $DISPLAYNAME..." info all
- # Create export file and check dependencies
- # write_export_config
- if [ "$EXPORTOK" == "no" ]; then
- app_logger "Start failed: Unable to update export file " error all
- return
- fi
- fi
- # Make working directories and write the app config file
- #app_make_dirs
- #write_app_config
-
- # Start the app
- sudo -H -u root /bin/bash -c 'nohup '$APPEXECUTABLE' > /dev/null 2>&1 &'
- # Checks if the app started properly or not, giving it 10 seconds to create the PID file
- local TIMER=0
- while [ ! -e "$PIDFILE" ]; do
- let TIMER=$TIMER+1
- sleep 1
- if [ $TIMER -gt 10 ]; then
- app_logger "Start failed: No PID created " error all
- sleep 3
- return
- fi
- done
- # Check if process specified in the PID is actually running, as a double check
- TIMER=0
- while [[ -e "$PIDFILE" && ! -f /proc/`cat "$PIDFILE" 2> /dev/null`/exe ]]; do
- let TIMER=$TIMER+1
- sleep 1
- if [ $TIMER -gt 5 ]; then
- app_logger "Start failed: PID created but no process exists " error all
- sleep 3
- return
- fi
- done
- # Notify if start was successful or failed
- app_logger "Start OK! " info all
- sleep 1
- }
- app_stop() {
- # No-op if already running
- local STATUS=`app_status`
- app_logger "Stopping $DISPLAYNAME..." info all
- if [ "$STATUS" == "STOPPED" ]; then
- app_logger "Stop OK: Already stopped " info all
- sleep 1
- return
- fi
- # Send the kill command to gracefully shutdown
- kill $(cat "$PIDFILE" ) 2> /dev/null
- # Begin a timer for shutdown, force kill process if not shut down by end of timer
- let TIMER=0
- while [ -e "$PIDFILE" ]; do
- let TIMER=$TIMER+1
- sleep 1
- # Process has ended but PID file remains, so remove it
- if [ ! -f /proc/`cat "$PIDFILE" 2> /dev/null`/exe ]; then
- rm "$PIDFILE" 2> /dev/null
- fi
- if [ $TIMER -gt 30 ]; then
- app_logger "Taking too long: Force killing process" warn log
- kill -9 $(cat "$PIDFILE" ) 2> /dev/null
- rm "$PIDFILE"
- break
- fi
- done
- app_logger "Stop OK! " info all
- sleep 1
- }
- app_restart() {
- app_stop
- app_start
- }
- app_status() {
- # Get running status
- local STATUS=""
- if [ ! -f "$APPEXECUTABLE" ]; then
- STATUS="NOT INSTALLED"
- elif [ -f "$PIDFILE" ] && [ -f /proc/`cat "$PIDFILE" 2> /dev/null`/exe ]; then
- STATUS="RUNNING"
- else
- STATUS="STOPPED"
- # Remove stale PID file that shouldn't exist anymore
- [ -f "$PIDFILE" ] && rm -f "$PIDFILE"
- fi
- echo "$STATUS"
- }
- app_buttonstart() {
- if [ -f "$PLGCONFFILE" ]; then
- sync_app_config
- app_start
- else
- app_logger "Start failed: Config file missing - Reinstall plugin " error all
- sleep 3
- fi
- }
- app_logger() {
- # First passed item is the text ($1), secone item is severity ($2 - info, warn, error), third is where to log ($3 - all, log)
- local LOGTEXT=$1
- local LOGTYPE=$2
- local LOGVAR=$3
- local TIMESTAMP=`date +"%Y-%m-%d %T"`
- # Set the type of log
- if [ "$LOGTYPE" == "info" ]; then
- TYPE="[INFO]"
- elif [ "$LOGTYPE" == "warn" ]; then
- TYPE="[WARNING]"
- elif [ "$LOGTYPE" == "error" ]; then
- TYPE="[ERROR]"
- fi
- # If log file doesn't exist, make it
- if [ ! -f "$PLGLOGFILE" ]; then
- mkdir -p "/var/log/minidlna"
- touch "$PLGLOGFILE"
- fi
- # Echo the text to display and log, or just log file
- if [ "$LOGVAR" == "all" ]; then
- echo -e "${LOGTEXT}"
- echo -e "${TIMESTAMP} ${TYPE}\t${LOGTEXT}" >> "$PLGLOGFILE"
- elif [ "$LOGVAR" == "log" ]; then
- echo -e "${TIMESTAMP} ${TYPE}\t${LOGTEXT}" >> "$PLGLOGFILE"
- fi
- }
- app_enable() {
- app_stop
- SERVICE=enable
- app_start
- }
- app_disable() {
- app_stop
- SERVICE=disable
- }
- app_curver() {
- # This gets the current version installed
- local CURVER=""
- if [ "$ARRAYSTATE" == "Started" ]; then
- [ -e "$APPEXECUTABLE" ] && CURVER=`sudo -H -u root /bin/bash -c ''$APPEXECUTABLE' -V 2>&1' | cut -f1 | awk '{print $2}'` || CURVER="NOT INSTALLED"
- fi
- echo "$CURVER"
- }
- case "$1" in
- 'start')
- app_logger "*** Start Initiated ***" info log
- [ "$2" == "force" ] && ARRAYSTATE="Started"
- app_start
- ;;
- 'stop')
- app_logger "*** Stop Initiated ***" info log
- app_stop
- ;;
- 'restart')
- app_logger "*** Restart Initiated ***" info log
- app_restart
- ;;
- 'status')
- app_status
- ;;
- 'currentversion')
- app_curver
- ;;
- 'enable')
- app_logger "*** Apply - Enable Initiated ***" info log
- VAR="$2"
- VAR=`echo "$VAR" | sed 's!@20! !g'`
- VAR=`echo "$VAR" | sed 's!@@2200!@20!g'`
- VARS=( $VAR )
- app_enable ${VARS[0]} ${VARS[1]} ${VARS[2]} ${VARS[3]} ${VARS[4]} ${VARS[5]} ${VARS[6]} ${VARS[7]} ${VARS[8]} ${VARS[9]} ${VARS[10]} ${VARS[11]} ${VARS[12]} ${VARS[13]}
- ;;
- 'disable')
- app_logger "*** Apply - Disable Initiated ***" info log
- VAR="$2"
- VAR=`echo "$VAR" | sed 's!@20! !g'`
- VAR=`echo "$VAR" | sed 's!@@2200!@20!g'`
- VARS=( $VAR )
- app_disable ${VARS[0]} ${VARS[1]} ${VARS[2]} ${VARS[3]} ${VARS[4]} ${VARS[5]} ${VARS[6]} ${VARS[7]} ${VARS[8]} ${VARS[9]} ${VARS[10]} ${VARS[11]} ${VARS[12]} ${VARS[13]}
- ;;
- *)
- echo "usage $0 [start | stop | restart | status | install | update | updateplg | downgradeplg | removeplg | latestversion | currentversion]"
- esac
|