Библиотека сайта rus-linux.net
Bash скрипты: Пишем в системные логи
Оригинал: Shell scripting: Write message to a syslog / log fileАвтор: Vivek Gite
Дата: 27 января 2007
Свободный перевод: Алексей Дмитриев
Дата перевода: 10 июля 2010
Приложения и программы дают свои сообщения в системные логи в директории /var/log при помощи syslogd. А как можно добавить свои сообщения в логи из командной строки или при помощи bash скрипта?
Команда logger
Команда logger ≈ это консольный интерфейс для связи с модулем системных логов. Она позволяет записывать однострочные сообщения в системный лог из командной строки. Например, чтобы дать сообщение "System rebooted for hard disk upgrade" нужно ввести в командной строке:
$ logger System rebooted for hard disk upgrade
Чтобы убедиться в том, что в логе появилась такая запись, нужно просмотреть файл /var/log/messages. Это можно сделать при помощи следующих команд:
# tail /var/log/messages
# less /var/log/messages
# more -f /var/log/messages
# vi /var/log/messages
Обратите внимание, что просмотр логов нужно производить от имени суперпользователя (команды su, sudo, а в некоторых дистрибутивах даже su - ).
Выберем tail, показывающий только 10 последних записей, так как файл /var/log/messages может быть весьма велик:
# tail /var/log/message
И увидим последней строчкой:
Jan 26 20:53:31 dell6400 logger: System rebooted for hard disk upgrade
Скрипты bash
Можно применять команду logger в скриптах:
#!/bin/bash HDBS="db1 db2 db3 db4" BAK="/sout/email" [ ! -d $BAK ] && mkdir -p $BAK || : /bin/rm $BAK/* NOW=$(date +"%d-%m-%Y") ATTCH="/sout/backup.$NOW.tgz" [ -f $ATTCH ] && /bin/rm $ATTCH || : MTO="you@yourdomain.com" for db in $HDBS do FILE="$BAK/$db.$NOW-$(date +"%T").gz" mysqldump -u admin -p'password' $db | gzip -9 > $FILE done tar -jcvf $ATTCH $BAK mutt -s "DB $NOW" -a $ATTCH $MTO <<EOF DBS $(date) EOF [ "$?" != "0" ] && logger "$0 - MySQL Backup failed" || :
Последняя строка и будет давать запись в лог в случае неудачи создания запасной копии.
Другие варианты применения команды logger
Для записи в другие логи применяется опция -f, например, для записи в /var/log/myapp.log:
$ logger -f /var/log/myapp.logПри помощи опции -s можно дублировать посланное в лог сообщение на экране монитора в выводе стандартного сообщения (stderr):
# logger -s "Hard disk full" logger: Hard disk full
Команда logger имеет очень понятный ман. Еще будет полезен
man syslogd