вывод bash stdout, появляющийся в перенаправленном файле stderr - PullRequest
0 голосов
/ 03 декабря 2018

Документы 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
...