Как разобрать файл журнала с помощью только сценарий оболочки за последний час?
Каждый час сценарий должен выполняться, анализировать журналы за предыдущий час, и уже предупрежденные или перечисленные ошибки не должны повторяться.
Пример журнала ошибок приведен ниже:
120622 13:06:36 mysqld_safe Starting mysqld daemon with databases from <path>
120622 13:06:36 [Note] Plugin'FEDERATED' is disabled.
120622 13:06:36 InnoDB: Initializing buffer pool, size = \78.0M
120622 13:06:36 InnoDB: Completed initialization of buffer pool
InnoDB: No valid checkpoint found.
InnoDB: If this error appears when you are creating an InnoDB database,
InnoDB: the problem may be that during an earlier attempt you managed
InnoDB: to create the InnoDB data files, but log file creation failed.
InnoDB: If that is the case, please refer to
InnoDB: http:<path>error-creating-innodb.html
120622 13:06:36 [ERROR] Plugin 'InnoDB' init function returned error.
120622 13:06:36 [ERROR] Plugin 'InnoDB' registration as a STORAGE ENGINE failed.
120622 13:06:36 [Note] Event Scheduler: Loaded 0 events
120622 13:06:36 [Note] <path>mysqld: ready for connections.
Я хочу предупредить только строку ERROR d.
Проверять, выписываться logtail
. Это инструмент для чтения строк в журналах, которые не были прочитаны.
http://manpages.ubuntu.com/manpages/hardy/man8/logtail2.8.html
Напишите такой скрипт и вызывайте его из cron каждый час:
#!/bin/bash
logfile=/var/lib/mysql/error.log
oldlogfile=/var/lib/mysql/error.log.old
email=your@mail.box.here
if [ -f $oldlogfile ]; then
diff $oldlogfile $logfile | grep ERROR > /dev/null
if [ $? -eq 0 ]; then
diff $oldlogfile $logfile | grep ERROR | mail -s 'last hour mysql errors' $email
fi
fi
cp -p $logfile $oldlogfile