如何在程序死后重新启动它

Kas*_*man 0 bash process

我正在写一些像这样的监控程序:

 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

如何监控此例程并在死亡时重新启动它?

pax*_*blo 6

如果你想要跟随文件而不是描述符(所以你得到最新的文件,即使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输出中.

使用该解决方案,该过程不应该死亡,因此不需要重新启动它.