首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >shell脚本重定向输出

shell脚本重定向输出
EN

Stack Overflow用户
提问于 2014-06-10 03:31:53
回答 1查看 593关注 0票数 0

由于防止进程关闭,我有一个shell脚本来监视进程。如果进程已关闭,该脚本将重新启动它。顺便说一句,当系统启动时,crontab将自动运行脚本。如何获得由shell脚本启动的进程的输出?

代码语言:javascript
复制
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH
while :
do
if [ -z "$(ps -ef | grep -v grep | grep 225.0.6.4)" ]; then
        date +"%m-%d-%y %T" >> /home/andy/log/stream.log
        echo  "225.0.6.4 - 103 not worked and restart process" >> /home/andy/log/stream.log
         echo "225.0.6.4 - 103 not worked and restart process"

/usr/bin/tzap -a 1 -c /home/andy/channels.conf -o - -r -p "D" | /home/andy/ffmpeg -f mpegts -i pipe:0 -c:v libx264 -preset medium -crf 23 -bufsize 3000K -minrate 1200k -maxrate 1200k -pix_fmt yuv420p -g 50 -s 1024x768 -acodec libmp3lame -b:a 128k -ac 2 -ar 44100 -f mpegts udp://225.0.6.4:50000 &

fi
sleep 1
done
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-06-10 06:25:58

看起来,您希望管道的输出也转到日志文件中。如果是,那么:

代码语言:javascript
复制
#!/bin/bash
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin:~/bin
export PATH

exec >> /home/andy/log/stream.log

while :
do
    if [ -z "$(ps -ef | grep -v grep | grep 225.0.6.4)" ]; then
       date +"%m-%d-%y %T" >> /home/andy/log/stream.log
       echo "225.0.6.4 - 103 not worked and restart process"
       echo "225.0.6.4 - 103 not worked and restart process" >&2

       /usr/bin/tzap -a 1 -c /home/andy/channels.conf -o - -r -p "D" |
       /home/andy/ffmpeg -f mpegts -i pipe:0 -c:v libx264 -preset medium -crf 23 \
           -bufsize 3000K -minrate 1200k -maxrate 1200k -pix_fmt yuv420p -g 50 \
           -s 1024x768 -acodec libmp3lame -b:a 128k -ac 2 -ar 44100 -f mpegts \
           udp://225.0.6.4:50000 &

    fi
    sleep 1
done

exec >> /home/andy/log/stream.log确保所有标准输出都进入日志文件。我稍微欺骗了一些事情,使得过去用于标准输出的日志消息现在变成了标准错误。如果您必须让它转到原始的标准输出,那么:

代码语言:javascript
复制
exec 3>&1 >> /home/andy/log/stream.log

…

       echo "225.0.6.4 - 103 not worked and restart process" >&3

这就是我的职责所在。其实也不难。3>&1使文件描述符3引用与标准输出相同的位置(行的其余部分立即将标准输出引用到日志文件)。>&3将输出重定向到文件描述符3,这与原始标准输出相同。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24132394

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档