Tuesday, January 4, 2022

[SOLVED] Reading log file and if error occurs restart service

Issue

I'm trying to create a script where it monitors a log file and if an error appears, it sends an e-mail with python. The script works, but once it detects an error, it starts spamming emails. Is there a way to avoid this?

# cat /usr/local/bin/monitor.bash
#!/bin/bash

tail -fn0 /var/log/syslog | while read line ; do
echo "${line}" | grep -i "error" > /dev/null
if [ $? = 0 ] ; then
  python emailsend.py
fi
done

Thanks in advance!

Edit: I'm planning to have this running as a service for constant monitoring of logs. Once it detects an error, I want it to sent an e-mail once, then it will restart some services(haven't added it to the script yet) and keep monitoring the file until it rotates. I hope this narrows it down a bit.


Solution

If I get logic of the code correctly, you can throw in some lines into the log to prevent getting into if clause and restart service.

# cat /usr/local/bin/monitor.bash
#!/bin/bash

tail -fn0 /var/log/syslog | while read line ; do
echo "${line}" | grep -i "error" > /dev/null
if [ $? = 0 ] ; then
  python emailsend.py
  # append line to the log to prevent grepping of 'error'
  echo 'dummy line' >> /var/log/syslog
  # restart your services here
fi
done

Hope it helps.



Answered By - Monsieur Merso