Script gegen Verbindungsunterbrechungen abgesichert
This commit is contained in:
parent
6f2dd79c3d
commit
a4959c22ef
50
Dump.sh
50
Dump.sh
|
@ -1,14 +1,16 @@
|
||||||
#!/bin/bash
|
#!/bin/bash
|
||||||
|
|
||||||
NAME=$1
|
NAME=$1
|
||||||
SERVER_IP=192.168.1.66
|
#SERVER_IP=192.168.1.66
|
||||||
|
SERVER_IP=192.168.1.20
|
||||||
PORT=8080
|
PORT=8080
|
||||||
USERNAME=admin
|
USERNAME=admin
|
||||||
PASSWORD="123456"
|
PASSWORD="123456"
|
||||||
CAMERAS="0 1 2 3 4 5 6 7 8 9"
|
CAMERAS="0 1 2 3 4 5 6 7 8 9"
|
||||||
# the real values _will_ differ depending on the machine running the script !!!
|
# the real values _will_ differ depending on the machine running the script !!!
|
||||||
SECONDS_PER_FILE=3600
|
SECONDS_PER_FILE=3600
|
||||||
OVERLAP_PER_FILE=60
|
OVERLAP_PER_FILE=10
|
||||||
|
FFMPEG_TIMEOUT=10000000 # 10 seconds
|
||||||
|
|
||||||
PIDFILE_BASE=/tmp/wget_script.$RANDOM.pids
|
PIDFILE_BASE=/tmp/wget_script.$RANDOM.pids
|
||||||
if [ -z "$NAME" ]; then
|
if [ -z "$NAME" ]; then
|
||||||
|
@ -27,7 +29,7 @@ quit() {
|
||||||
SHUTDOWN_IN_PROGRESS="true"
|
SHUTDOWN_IN_PROGRESS="true"
|
||||||
echo "quitting..."
|
echo "quitting..."
|
||||||
PIDS="$(cat ${PIDFILE_BASE}_A 2>/dev/null) $(cat ${PIDFILE_BASE}_B 2>/dev/null)"
|
PIDS="$(cat ${PIDFILE_BASE}_A 2>/dev/null) $(cat ${PIDFILE_BASE}_B 2>/dev/null)"
|
||||||
rm -f ${PIDFILE_BASE}_A ${PIDFILE_BASE}_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
|
||||||
kill $PIDS 2>/dev/null || (echo "waiting for remaining proccesses..."; sleep 10; echo "killing remaining proccesses..."; kill -9 $PIDS 2>/dev/null)
|
kill $PIDS 2>/dev/null || (echo "waiting for remaining proccesses..."; sleep 10; echo "killing remaining proccesses..."; kill -9 $PIDS 2>/dev/null)
|
||||||
exit $1
|
exit $1
|
||||||
fi
|
fi
|
||||||
|
@ -36,6 +38,7 @@ quit() {
|
||||||
trap 'quit 0' SIGINT SIGTERM EXIT
|
trap 'quit 0' SIGINT SIGTERM EXIT
|
||||||
|
|
||||||
do_record() {
|
do_record() {
|
||||||
|
GROUP_ID=$1
|
||||||
for i in $CAMERAS; do
|
for i in $CAMERAS; do
|
||||||
echo "starting recording for camera $i" >&2
|
echo "starting recording for camera $i" >&2
|
||||||
OUTFILE_START=tmp_dump_cam_${i}_$(date +%s.%N)_RANDOM$RANDOM.$OUT_FILE_TYPE
|
OUTFILE_START=tmp_dump_cam_${i}_$(date +%s.%N)_RANDOM$RANDOM.$OUT_FILE_TYPE
|
||||||
|
@ -47,43 +50,66 @@ do_record() {
|
||||||
if [ -f $OUTFILE_START ]; then
|
if [ -f $OUTFILE_START ]; then
|
||||||
mv $OUTFILE_START dump_cam_${i}_${EXACT_START_TIME}_${EXACT_END_TIME}.$OUT_FILE_TYPE
|
mv $OUTFILE_START dump_cam_${i}_${EXACT_START_TIME}_${EXACT_END_TIME}.$OUT_FILE_TYPE
|
||||||
fi
|
fi
|
||||||
|
if [ -f ${PIDFILE_BASE}_KILL_${GROUP_ID} ]; then
|
||||||
|
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
|
||||||
|
fi
|
||||||
}
|
}
|
||||||
trap outfile_close_trap SIGINT SIGTERM EXIT
|
trap outfile_close_trap SIGINT SIGTERM EXIT
|
||||||
#wget --ignore-length --http-user=$USERNAME --http-passwd=$PASSWORD http://${SERVER_IP}:$PORT/cam/$i/stream.mjpeg -O $OUTFILE_START -q >> /dev/null 2>&1 &
|
#wget --ignore-length --http-user=$USERNAME --http-passwd=$PASSWORD http://${SERVER_IP}:$PORT/cam/$i/stream.mjpeg -O $OUTFILE_START -q >> /dev/null 2>&1 &
|
||||||
${SCRIPT_DIR}/ffmpeg -use_wallclock_as_timestamps 1 -f mjpeg -i http://$USERNAME:$PASSWORD@${SERVER_IP}:$PORT:8080/cam/$i/stream.mjpeg -c copy -ts abs -y $OUTFILE_START >> /dev/null 2>&1 &
|
#THIS_CAPTURE_PID=$!
|
||||||
THIS_WGET_PID=$!
|
${SCRIPT_DIR}/ffmpeg -use_wallclock_as_timestamps 1 -timeout $FFMPEG_TIMEOUT -f mjpeg -i http://$USERNAME:$PASSWORD@${SERVER_IP}:$PORT:8080/cam/$i/stream.mjpeg -c copy -ts abs -y $OUTFILE_START >> /dev/null 2>&1 &
|
||||||
echo $THIS_WGET_PID >> ${PIDFILE_BASE}_${1}
|
THIS_CAPTURE_PID=$!
|
||||||
wait $THIS_WGET_PID
|
echo $THIS_CAPTURE_PID >> ${PIDFILE_BASE}_$GROUP_ID
|
||||||
|
wait $THIS_CAPTURE_PID
|
||||||
) &
|
) &
|
||||||
done
|
done
|
||||||
}
|
}
|
||||||
|
|
||||||
while true; do
|
while true; do
|
||||||
if [ ! -z "$PIDS_A" ]; then kill -9 $PIDS_A 2>/dev/null; fi
|
if [ ! -z "$PIDS_A" ]; then kill -9 $PIDS_A 2>/dev/null; fi
|
||||||
|
rm -f ${PIDFILE_BASE}_KILL_A
|
||||||
echo "starting group A"
|
echo "starting group A"
|
||||||
do_record A
|
do_record A
|
||||||
PIDS_B="$(cat ${PIDFILE_BASE}_B 2>/dev/null)"
|
PIDS_B="$(cat ${PIDFILE_BASE}_B 2>/dev/null)"
|
||||||
if [ ! -z "$PIDS_B" ]; then
|
if [ ! -z "$PIDS_B" ]; then
|
||||||
$OVERLAP_PER_FILE
|
sleep $OVERLAP_PER_FILE
|
||||||
echo "killing group B"
|
echo "killing group B"
|
||||||
|
echo $PIDS_B > ${PIDFILE_BASE}_KILL_B
|
||||||
kill $PIDS_B 2>/dev/null
|
kill $PIDS_B 2>/dev/null
|
||||||
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE))
|
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE)) &
|
||||||
|
SLEEP_PID=$!
|
||||||
else
|
else
|
||||||
sleep $SECONDS_PER_FILE
|
sleep $SECONDS_PER_FILE &
|
||||||
|
SLEEP_PID=$!
|
||||||
fi
|
fi
|
||||||
|
echo $SLEEP_PID > ${PIDFILE_BASE}_SLEEP_PID_A
|
||||||
|
wait $SLEEP_PID
|
||||||
|
|
||||||
if [ ! -z "$PIDS_B" ]; then kill -9 $PIDS_B 2>/dev/null; fi
|
if [ ! -z "$PIDS_B" ]; then kill -9 $PIDS_B 2>/dev/null; fi
|
||||||
|
rm -f ${PIDFILE_BASE}_KILL_B
|
||||||
echo "starting group B"
|
echo "starting group B"
|
||||||
do_record B
|
do_record B
|
||||||
PIDS_A="$(cat ${PIDFILE_BASE}_A 2>/dev/null)"
|
PIDS_A="$(cat ${PIDFILE_BASE}_A 2>/dev/null)"
|
||||||
if [ ! -z "$PIDS_A" ]; then
|
if [ ! -z "$PIDS_A" ]; then
|
||||||
sleep $OVERLAP_PER_FILE
|
sleep $OVERLAP_PER_FILE
|
||||||
echo "killing group A"
|
echo "killing group A"
|
||||||
|
echo $PIDS_A > ${PIDFILE_BASE}_KILL_A
|
||||||
kill $PIDS_A 2>/dev/null
|
kill $PIDS_A 2>/dev/null
|
||||||
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE))
|
sleep $(($SECONDS_PER_FILE - $OVERLAP_PER_FILE)) &
|
||||||
|
SLEEP_PID=$!
|
||||||
else
|
else
|
||||||
sleep $SECONDS_PER_FILE
|
sleep $SECONDS_PER_FILE &
|
||||||
|
SLEEP_PID=$!
|
||||||
fi
|
fi
|
||||||
|
echo $SLEEP_PID > ${PIDFILE_BASE}_SLEEP_PID_B
|
||||||
|
wait $SLEEP_PID
|
||||||
done
|
done
|
||||||
|
|
||||||
quit 1
|
quit 1
|
||||||
|
|
Loading…
Reference in New Issue