我正在写一些像这样的监控程序:
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 &
Run Code Online (Sandbox Code Playgroud)
但是每次logrotation出现时它都会改变/var/log/router-home.log对这个例程的多个进程的杀戮,我无法通过执行一个来检查它的状态ps -e|grep tail
如何监控此例程并在死亡时重新启动它?
如果你想要跟随文件名而不是描述符(所以你得到最新的文件,即使logrotate它在你下面移动它),你可以使用tail -F它基本上:
tail --follow=name --retry
Run Code Online (Sandbox Code Playgroud)
我通常做的是运行:
tail -F somefile 2>/dev/null
Run Code Online (Sandbox Code Playgroud)
因此,当文件更改时,我看不到错误消息.您可以通过确保在somefile运行该命令时不存在来尝试此操作.然后,从另一个会话:
echo pax is a >somefile
rm somefile
echo wonderful person >somefile
Run Code Online (Sandbox Code Playgroud)
你会看到这两行出现在tail输出中.
使用该解决方案,该过程不应该死亡,因此不需要重新启动它.