Зависание при запуске нескольких демонов
Я использую сервер Debian Squeeze AMD64. Целевым уровнем запуска после загрузки является уровень запуска 2, который включает rsyslogd, cron, sshd и некоторые другие вещи, но не dovecot, postfix, apache2 и т. Д. Системе не удается достичь уровня запуска 2 с несколькими признаками:
- Система зависает при попытке запустить rsyslogd
- Загрузка в runlevel 1 работает, затем логин из консоли работает
- Запуск rsyslogd с уровня запуска 1 через /etc/init.d/rsyslog зависает
- Запуск уровня запуска 2 с отключенным rsyslogd работает
- Но затем, вход в систему через консоль не удается: я получаю MOTD, а затем ничего
- Запуск sshd с уровня запуска 1 успешен
- Но тогда я не могу войти через ssh. Иногда пароль SSH логин дает мне MOTD, а затем ничего, иногда даже не это. Попытка предложить открытый ключ, кажется, достаточно раздражает sshd, чтобы больше не разговаривать со мной.
- При перезагрузке с уровня запуска 1 сервер зависает при попытке остановить apache2 (который не запущен, так что это действительно должно быть тривиально). Попытка остановить apache2 при входе в runleve 1 также приводит к зависанию.
И это только то, что постоянно терпит неудачу. Оперативная память была протестирована, dmesg показывает без проблем. Я понятия не имею.
Обновление: (сокращенный) вывод из rsyslogd -c4 -d, вызываемого на уровне выполнения 1
rsyslogd 4.6.4 запуск, режим совместимости 4, путь к модулю '' запрашиваемый вызывающим объектом 'net', не найден (iRet -3003) Запрошен для загрузки модуля 'lmnet' модуль загрузки '/user/lib/rsyslog/lmnet.so' типа 2 загружается conf.c запрашивает ref для 'lmnet', инициализирован runcount 1 rsylog, версия 4.6.4, текущие пользователи 1 syslogd.c запрашивает ref для 'lmnet', refcount теперь 2
Тогда я могу убить rsyslogd с помощью Strg+C. /var/log не показывает ни один из настроенных файлов журнала.
Update2: Благодаря @DerfK я до сих пор не знаю, но, по крайней мере, я сузил проблему. Я сейчас тестирую с /etc/init.d/apache2 stop
(без запуска apache2, конечно), который также зависает и выглядит как еще более очевидный сбой.
После некоторого тестирования я обнаружил, что файл с одной строкой:
/ usr / sbin / apache2ctl configtest> / dev / null 2> & 1
зависает, пока работает та же строка, выполненная в интерактивной оболочке. Я не смог дополнительно уменьшить эту строку, в то время как каждая отдельная часть, перенаправление потока и сам коммандос необходимы для воспроизведения зависания. @DerfK также указал мне на strace
который дал намек на то, что мы имеем здесь в виду:
wait4(-1
для сценариев инициализацииfutex(0xsomepointer, FUTEX_WAIT_PRIVATE, 2, NULL
заrsyslogd
/apache2
двоичные файлы, вызываемые сценариями инициализации
Система была установлена как Debian Lenny моим хостером осенью 2011 года, я немедленно обновил ее до Squeeze и постоянно обновлял Squeeze, который затем использовался для тестирования. Однако больших изменений не было. Я думаю, я никогда не пытался перезагрузить систему раньше.
Update3: я нашел проблему. Мой /etc/nsswitch.conf указал ldap как резервную копию поиска хостов, которая недоступна на момент загрузки. Полагаясь на днс исключительно устраняет мои проблемы с загрузкой.
2 ответа
Для меня это звучит так, будто некоторые базовые сетевые службы не запускаются. Сравните содержание /etc/rc2.d
с /etc/rc3.d
ro Посмотрим, запускает ли уровень запуска 3 что-нибудь, чего не запускает уровень запуска 2 (обычно это происходит, но обычно это не что-то фундаментальное).
Debian Squeeze по умолчанию выполняет параллельный запуск. Это означает, что при загрузке одновременно запускаются несколько сценариев инициализации. Вы можете попытаться отключить это, чтобы только один скрипт запускался за раз, чтобы помочь точно определить, на каком этапе он терпит неудачу. Поскольку сценарии инициализации будут выполняться в одном и том же порядке каждый раз, он должен каждый раз выходить из строя на одном и том же, если это не является более серьезной проблемой.
Чтобы отключить одновременную загрузку, добавьте CONCURRENCY=none
в /etc/default/rcS
, Удалите строку, чтобы восстановить настройки по умолчанию.