I have a log file that is written to by a server. I wrote a bash script to send me an email if there is an error in the server. I would now like to remove the lines containing the errors so I don't keep getting emails. I accomplish this by doing the following:
sed -i "/WARNING/d" logs/console.log
After running sed however, no more changes are written to the log. I'm guessing this is because running sed closes any open file descriptors or something. However, when I edit the file and manually remove the warning lines with vi I don't have this problem.
I have also tried redirecting the server output myself with both '>' and '>>' operators and after editing the file with sed the same thing happens (i.e. they are no longer updated).
When
sed
rewrites the log file the server process probably gets an IO error and doesn't try to reopen the log file. I don't know if this approach can work out.sed
definitely doesn't have flags to tweak the way it rewrites files with the-i
flag, and I don't know if the server can be tweaked to be more resilient when appending to the log.So your best option might be a different approach: save the timestamp of the last error look for errors after that timestamp. Something like this:
This script is just to give you an idea, it can be improved.