Adding script to step through all channels, check if running.pid exists, if so kill process, delete .pid and finally delete .prevplaying file. Useful for debugging mostly.

This commit is contained in:
Justin Emter
2017-09-11 12:23:07 -07:00
parent a7ba71a9c2
commit a1dc7fae60

View File

@@ -0,0 +1,103 @@
#!/bin/bash
# file: stopall.sh
#----
# Simple script to stop any/all channels by killing the processes/deleting the corresponding
# .pid files/previouschannel file.
#
#----
#----
# To Use:
# This script needs to be placed on the same level as your channels.
#----
#----BEGIN EDITABLE VARS----
OUTPUT_PREV_CHANNEL_PATH=.
OUTPUT_PREV_CHANNEL_FILE=".prevplaying"
CHANNEL_DIR_INCREMENT_SYMBOL="_"
PID_FILE_NAME="running.pid"
# If using 'virtualenv' with python, specify the local virtualenv dir.
VIRTUAL_ENV_DIR="env"
#----END EDITABLE VARS-------
FIRST_RUN=false
# If the prevplaying file exists, delete it
if [ -e "$OUTPUT_PREV_CHANNEL_PATH/$OUTPUT_PREV_CHANNEL_FILE" ]; then
rm "$OUTPUT_PREV_CHANNEL_PATH/$OUTPUT_PREV_CHANNEL_FILE"
fi
# Scan the dir to see how many channels there are, store them in an arr.
CHANNEL_DIR_ARR=( $(find . -maxdepth 1 -type d -name '*'"$CHANNEL_DIR_INCREMENT_SYMBOL"'[[:digit:]]*' -printf "%P\n") )
# If this script see's there are multiple channels,
# check each channel dir for running .pid file to kill the process/delete the file:
if [ "${#CHANNEL_DIR_ARR[@]}" -gt 1 ]; then
NEXT_CHANNEL=""
PREV_CHANNEL_FOUND=false
PREV_CHANNEL_DIR=""
echo "+++++ There are ${#CHANNEL_DIR_ARR[@]} channels detected."
# Loop through each Channel Dir, if .pid file exists, then kill pid and rm pid file.
for channel in "${CHANNEL_DIR_ARR[@]}"
do
if [ -e "$channel/$PID_FILE_NAME" ]; then
the_pid=$(<$channel/$PID_FILE_NAME)
kill "$the_pid"
COUNTER=1
while [ -e /proc/$the_pid ]
do
echo "+++++ $the_pid is still running"
sleep .7
COUNTER=$[$COUNTER +1]
if [ $COUNTER -eq 20 ]; then
kill -9 "$the_pid"
fi
if [ $COUNTER -eq 40 ]; then
exit 1
fi
done
echo "+++++ $the_pid has finished"
echo "+++++ Removing $channel/$PID_FILE_NAME"
rm "$channel/$PID_FILE_NAME"
fi
done
echo "Exiting stop-all-channels.sh script."
fi
exit 0