我正在编写一些像这样的监控程序:
tail -f /var/log/router-home.log | while read line ; do
echo "$line" | egrep "MTF_SIP" | cut -b 28- | sed -u 's/#012/\n/g' \
| egrep "IPP-->Received Event|rvCCConnMdmNewDigitCB|rvCCCallHandleOutOfBandDTMF" \
| cut -d " " -f 15
done > /tmp/phone/status &
但每次logrotation出现时都会更改/var/log/router-home.log
查看进程
在这个例程中有一个以上我只能通过执行ps -e|grep tail
如何监控此例程并在死亡时重新启动它?
答案 0 :(得分:6)
如果你想关注文件 name 而不是描述符(所以你得到最新的文件,即使像logrotate
这样的东西在你下面移动它),你可以使用{{1}这基本上是:
tail -F
我通常做的是跑步:
tail --follow=name --retry
所以当文件更改时我没有看到错误消息。您可以通过确保tail -F somefile 2>/dev/null
不存在然后运行该命令来尝试此操作。然后,从另一个会话:
somefile
,您会看到这两行显示在echo pax is a >somefile
rm somefile
echo wonderful person >somefile
输出中。
使用该解决方案,进程不应该死亡,因此不需要重新启动它。
答案 1 :(得分:1)