代码之家  ›  专栏  ›  技术社区  ›  Robert Lewis

bash stdout输出出现在重定向的stderr文件中

  •  0
  • Robert Lewis  · 技术社区  · 7 年前

    Bash医生这么说 echo 写信给 stdout .我有一个脚本可以重定向 stderr 归档 2>/home/pi/mydir/stderr-log.txt .它不会重定向 斯特杜特 .但文本输出由 回响 正在进入日志文件。

    脚本在后台运行(通过添加 & 直到命令的末尾)?

    完整的脚本:

    #! /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
    
    0 回复  |  直到 7 年前