Вы можете использовать error_log
в качестве маркера и не нуждаться в номерах строк в внешнем файле.
следующий сценарий:
#!/bin/bash
STRING="last_log_check_point_string"
LOGFILE="/opt/local/apache2/logs/error_log"
URL="http://localhost/$STRING"
linenum=$(grep -n "$STRING" $LOGFILE | tail -1 | sed 's/:.*//')
curl "${URL}" >/dev/null 2>&1
[[ ! -z "$linenum" ]] && sed -n "$linenum,\$p" < $LOGFILE | mail -s "error log at $(date)" "[email protected]"
- найдет номер строки последнего совпадение
last_log_check_point_string
- сделает запрос на ваш веб с несуществующей URL, что содержать вашу строку (так, вы получаете новое уведомление в
error_log
- новый marker_point
)
- каждая строка после вышеуказанного номер строки отправит вам письмо.
Последняя строка error_log будет новой marker point
, поэтому у вас есть контроль над тем, как работает скрипт. Если у вас нет curl
, используйте wget
- или можно сделать запрос с чистым башем.
или вариант - вы получите по электронной почте только тогда, когда некоторые ошибки произошли
#!/bin/bash
STRING="last_log_check_point_string"
LOGFILE="/opt/local/apache2/logs/error_log"
URL="http://localhost/$STRING"
TEMPFILE="/tmp/hterror.$$"
linenum=$(grep -n "$STRING" $LOGFILE | tail -1 | sed 's/:.*//')
curl "${URL}" >/dev/null 2>&1
[[ ! -z "$linenum" ]] && sed -n "$linenum,\$p" < $LOGFILE | grep -v "$STRING" >$TEMPFILE
[[ -s "$TEMPFILE" ]] && mail -s "error log at $(date)" "[email protected]" < $TEMPFILE
rm -f "$TEMPFILE"