diff --git a/Dump.sh b/Dump.sh index d0d3e2d..0b535cd 100755 --- a/Dump.sh +++ b/Dump.sh @@ -1,4 +1,5 @@ #!/bin/bash +while true; do ( NAME=$1 SERVER_IP=192.168.1.66 @@ -22,6 +23,7 @@ mkdir -p $CAPTURE_DIR cd $CAPTURE_DIR #OUT_FILE_TYPE="mjpeg" OUT_FILE_TYPE="avi" +SCRIPT_PID=$$ SHUTDOWN_IN_PROGRESS="false" quit() { @@ -29,7 +31,7 @@ quit() { SHUTDOWN_IN_PROGRESS="true" echo "quitting..." PIDS="$(cat ${PIDFILE_BASE}_A 2>/dev/null) $(cat ${PIDFILE_BASE}_B 2>/dev/null)" - rm -f ${PIDFILE_BASE}_A ${PIDFILE_BASE}_B ${PIDFILE_BASE}_KILL_A ${PIDFILE_BASE}_KILL_B ${PIDFILE_BASE}_SLEEP_PID_A ${PIDFILE_BASE}_SLEEP_PID_B + rm -f ${PIDFILE_BASE}_A ${PIDFILE_BASE}_B ${PIDFILE_BASE}_KILL_A ${PIDFILE_BASE}_KILL_B ${PIDFILE_BASE}_SLEEP_PID_A ${PIDFILE_BASE}_SLEEP_PID_B ${PIDFILE_BASE}_SLEEP_SYNC_A ${PIDFILE_BASE}_SLEEP_SYNC_B kill $PIDS 2>/dev/null || (echo "waiting for remaining proccesses..."; sleep 10; echo "killing remaining proccesses..."; kill -9 $PIDS 2>/dev/null) exit $1 fi @@ -54,11 +56,16 @@ do_record() { THIS_KILL_PID="$(cat ${PIDFILE_BASE}_KILL_${GROUP_ID} | grep -oe "\<${THIS_CAPTURE_PID}\>" )" fi if [ -z "$THIS_KILL_PID" ]; then - echo "capture for camera $i died, killing group $GROUP_ID" - if [ -f ${PIDFILE_BASE}_SLEEP_PID_${GROUP_ID} ]; then - THIS_SLEEP_PID="$(cat ${PIDFILE_BASE}_SLEEP_PID_${GROUP_ID})" - kill -9 $THIS_SLEEP_PID >> /dev/null 2>&1 - fi + # echo "capture for camera $i died, killing group $GROUP_ID" + # while [ -f ${PIDFILE_BASE}_SLEEP_SYNC_$GROUP_ID ]; do sleep 1; done + # if [ -f ${PIDFILE_BASE}_SLEEP_PID_${GROUP_ID} ]; then + # THIS_SLEEP_PID="$(cat ${PIDFILE_BASE}_SLEEP_PID_${GROUP_ID})" + # kill -9 $THIS_SLEEP_PID + # fi + echo "capture for camera $i died, commiting suicide" + kill $SCRIPT_PID >> /dev/null 2>&1 + sleep 10 + kill -9 %SCRIPT_PID >> /dev/null 2>&1 fi } trap outfile_close_trap SIGINT SIGTERM EXIT @@ -76,6 +83,7 @@ while true; do if [ ! -z "$PIDS_A" ]; then kill -9 $PIDS_A 2>/dev/null; fi rm -f ${PIDFILE_BASE}_KILL_A echo "starting group A" + touch ${PIDFILE_BASE}_SLEEP_SYNC_A do_record A PIDS_B="$(cat ${PIDFILE_BASE}_B 2>/dev/null)" if [ ! -z "$PIDS_B" ]; then @@ -90,11 +98,13 @@ while true; do SLEEP_PID=$! fi echo $SLEEP_PID > ${PIDFILE_BASE}_SLEEP_PID_A + rm -f ${PIDFILE_BASE}_SLEEP_SYNC_A wait $SLEEP_PID if [ ! -z "$PIDS_B" ]; then kill -9 $PIDS_B 2>/dev/null; fi rm -f ${PIDFILE_BASE}_KILL_B echo "starting group B" + touch ${PIDFILE_BASE}_SLEEP_SYNC_B do_record B PIDS_A="$(cat ${PIDFILE_BASE}_A 2>/dev/null)" if [ ! -z "$PIDS_A" ]; then @@ -109,7 +119,12 @@ while true; do SLEEP_PID=$! fi echo $SLEEP_PID > ${PIDFILE_BASE}_SLEEP_PID_B + rm -f ${PIDFILE_BASE}_SLEEP_SYNC_B + echo waiting B wait $SLEEP_PID + echo done B done quit 1 + +) done