Документы Bash говорят, что echo
пишет stdout
.У меня есть скрипт, который перенаправляет stderr
в файл с 2>/home/pi/mydir/stderr-log.txt
.Он не перенаправляет stdout
.Тем не менее, вывод текста echo
идет в файл журнала.
Может ли иметь какое-либо значение то, что скрипт запускается в фоновом режиме (добавляя &
в конец команды)?
Полный сценарий:
#! /bin/sh
case "$1" in
start)
echo "Starting mjpg_streamer!"
#First init
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 640x480 -d /dev/video0" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8085 -w /usr/local/share/mjpg-streamer/www" 2>/home/pi/mydir/stderr-log.txt &
#Second init
/usr/local/bin/mjpg_streamer -i "/usr/local/lib/mjpg-streamer/input_uvc.so -n -f 30 -r 640x480 -d /dev/video1" -o "/usr/local/lib/mjpg-streamer/output_http.so -p 8086 -w /usr/local/share/mjpg-streamer/www" 2>/home/pi/mydir/stderr-log.txt &
;;
stop)
echo "Stopping mjpg_streamer!"
killall mjpg_streamer
;;
*)
echo "usage: videoinit {start|stop}"
exit 1
;;
esac
exit 0
Сценарий, который вызывает этот сценарий (когда он находит новое сообщение об ошибке в файле журнала):
#!/bin/bash
ERRORLOG="/home/pi/mydir/stderr-log.txt"
LINECOUNT=0
NEWLINECOUNT=0
rm ${ERRORLOG}
touch ${ERRORLOG}
while true; do
inotifywait -q -e modify ${ERRORLOG} > /dev/null
NEWLINECOUNT=$(grep --count "Error grabbing frames" ${ERRORLOG} )
if [[ NEWLINECOUNT > LINECOUNT ]]; then
LINECOUNT=NEWLINECOUNT
/etc/init.d/videoinit stop
echo "Attempting mjpg-streamer reboot."
/etc/init.d/videoinit start
fi
done