Ubuntu 10. Краткое руководство пользователя
Шрифт:
Самая ответственная задача — это правильно составить условие. Условия записываются в квадратных скобках. Вот пример записи условий:
# переменная N = 10
[N==10]
# переменная N не равна 10
[N!=10]
Операции сравнения указываются не с помощью привычных знаков > или <, а с помощью следующих выражений:
— lt — меньше;
— gt — больше;
— le — меньше или равно;
— ge — больше или равно;
— eq —
Применять данные выражения нужно следующим образом:
[переменная выражение значение | переменная]
Например:
# N меньше 10
[$N — lt 10]
# N меньше A
[$N — lt $A]
В квадратных скобках вы также можете задать выражения для проверки существования файла и каталога:
— e файл — условие истинно, если файл существует;
— d каталог — условие истинно, если каталог существует;
— x файл — условие истинно, если файл является исполнимым.
С оператором case мы уже немного знакомы, но сейчас рассмотрим его синтаксис подробнее:
case переменная in
значение_1) команды_1;;
…
значение_^ команды_N;;
*) команды_по_умолчанию;;
esac
Значение указанной переменной по очереди сравнивается с приведенными значениями (значение_1…, значение_N). Если есть совпадение, то будут выполнены команды, соответствующие значению. Если совпадений нет, то будут выполнены команды по умолчанию. Пример использования case был приведен в листинге 22.3.
Глава 23
Восстановление системы после сбоя
23.1. Локализация причины сбоя
Всему есть своя причина — сбой не происходит сам по себе. Причиной может стать либо ошибка программного обеспечения, либо отказ «железа». Исходя из этого, различают программные и аппаратные сбои. Последние можно смело назвать аппаратно-программными, поскольку из-за отказа аппаратуры довольно часто происходят программные сбои. Самый простой пример — отказ винчестера, вследствие которого программа не может записать или прочитать данные, и происходит программный сбой. При некорректной работе оперативной памяти происходят порой сложнообъяснимые ошибки программного обеспечения.
23.2. Программный сбой
Прежде всего, нужно выяснить и по возможности устранить причину сбоя. Если это сугубо программный сбой, то причины две: неправильная настройка программы (или системы) и ошибка программы.
23.2.1. Неправильная настройка программы или системы
Как работала система до сбоя? Встречался ли подобный сбой раньше? Если ничего такого ранее вы не наблюдали и система работала как швейцарские часики, значит, скорее всего, причина в неправильной ее настройке. Вспомните, какие файлы конфигурации вы изменяли (или какие параметры устанавливали с помощью графических конфигураторов). Просто по памяти
23.2.2. Ошибка программы. Журналы системы
Когда причина ошибки в ваших действиях — это самый простой случай. Иногда бывает так, что система работала-работала, а на следующий день половина служб не запускается. В чем же причина? Тут вам поможет только чтение журналов системы, находящихся в каталоге /var/log:
/apache2/ — журналы Web-сервера Apache2;
/apt/ — журналы системы установки пакетов APT;
/clamav/ — журналы антивируса ClamAV;
/cups/ — журналы системы печати;
/gdm/ — журналы менеджера дисплея;
/installer/ — журналы программы установки;
/news/ — журналы NNTP-сервера и NNTP-клиентов;
/proftpd/ — журналы FTP-сервера;
/samba/ — протоколы Samba;
auth.log — журналы аутентификации (кто и когда входил в систему);
daemon.log — журналы для разных демонов (служб);
dmesg — загрузочные сообщения ядра;
dpkg.log — журналы программы dpkg;
kern.log — журналы сообщений ядра;
mail* — журналы почтовой службы;
messages — различные сообщения ядра (и в некоторых случаях — обычных программ);
mysql.log — протокол MySQL-сервера;
secure — журнал службы безопасности;
syslog — журнал демона syslog;
Xorg.0.log — журнал системы XFree86 (дисплей 0);
user.log — различные сообщения программ пользовательского уровня.
Протоколирование сообщений системы и программ ранее выполнялось двумя демонами: klogd и syslogd. В современных дистрибутивах (Ubuntu — не исключение) используется всего один демон протоколирования — rsyslogd.
Имена файлов журналов могут немного отличаться от перечисленных здесь, поскольку они зависят от настроек системы, в том числе и от настроек демона rsyslogd. Кроме того, в системе могут создаваться дополнительные файлы протоколов или даже каталоги, содержащие файлы протоколов, — повторюсь, все зависит от настроек системы. Чтобы узнать, какие файлы протоколов имеются в вашей системе, какие из них являются основными и для чего используются, откройте и изучите файлы конфигурации rsyslogd: /etc/rsyslog.conf и /etc/rsyslog.d/50-default.conf.
Однако в файлах конфигурации демона rsyslogd перечислены далеко не все файлы протоколов. Многие серверы ведут свои журналы, имена файлов которых вы можете узнать в файлах конфигурации того или иного сервера. Так, сообщения различных программ пользовательского уровня, т. е. обычных программ, возможно, запущенных с привилегиями root, протоколируются в файле /var/log/user.log.
В каком же журнале искать ошибку? Тут нужно исходить из принципа взаимоисключения: если у вас не работает Web-сервер Apache, то искать причину нужно в каталоге /var/log/apache2/, но никак не в файле /var/log/user.log.