Вопрос или проблема
Я пытаюсь устранить проблему на сервере MediaTemple (работающем на CentOS5), где кэш DNS устарел – я думаю, потому что nscd выдал ошибку. Я пытался перезапустить nscd:
# service nscd restart
Остановка nscd: [FAILED]
Запуск nscd: [ OK ]
Это имеет смысл, так как я считаю, что nscd выдал ошибку, и он не должен уже работать, но когда я проверяю статус nscd:
# service nscd status
nscd мертв, но подсистема заблокирована
Команда ps -A
не возвращает никаких процессов, связанных с nscd (я предполагаю, что из-за его завершения работы). Я отредактировал /etc/nscd.conf
и раскомментировал строку, определяющую расположение файла журналов. Файл был создан, но в него ничего не записывается.
Я пытался посмотреть инициализирующий скрипт, но понял, что он не помогает, так как скрипт считает, что все работает нормально – служба сообщает, что она успешно запустилась.
Как мне “разблокировать” подсистему, о которой жалуется nscd?
К сожалению, это ошибки в инициализирующих скриптах nscd и статус не имеет значения. Инициализирующий скрипт ожидает, что файл pid будет /var/run/nscd.pid
(что и будет, если инициализирующий скрипт будет записывать файл pid). Увы, nscd
сам записывает свой файл pid в /var/run/nscd/nscd.pid
.
Для упрощения попробуйте устранять неполадки с выключенным nscd
.
Если вы хотите знать, почему ncsd
не может запуститься, проверьте вывод команды strace -f /usr/sbin/nscd
.
Изучите вариант пакета bind-chroot (и его зависимости). Просто установите его через yum и измените ваш файл /etc/resolv.conf, чтобы он указывал на 127.0.0.1. Он немного более надежен, чем nscd изначально.
Nscd записывает свои файлы кэша на диск. Я раньше сталкивался с проблемами, когда он завершался с ошибкой при запуске, если возникали проблемы с чтением этого кэша. Попробуйте удалить все файлы в каталоге кэша (должен быть /var/cache/nscd) и снова перезапустить nscd.
У меня была несколько другая проблема – я думаю, она возникла из-за недостатка свободного места на системном разделе. Я принудительно завершил службу с помощью $ sudo kill <pid>
, затем удалил nscd.pid
, а затем запустил службу. Расположение файла может различаться в зависимости от ОС и дистрибутива. Для CentOS (и, предположительно, других вариантов Redhat), /var/run/nscd/nscd.pid
Запуск:
$ sudo service nscd start
Ответ или решение
Для решения проблемы с запуском nscd (Name Service Cache Daemon) на вашем сервере MediaTemple, работающем под управлением CentOS 5, необходимо учесть несколько факторов.
1. Причина, по которой nscd не запускается
Как вы уже заметили, сообщение nscd dead but subsys locked
указывает на то, что daemon не работает, но система считает, что он все еще активен из-за заблокированного подаваемого идентификатора процесса (PID). Это может быть результатом преждевременного завершения работы nscd без удаления PID-файла или других ошибок.
2. Удаление заблокированного PID-файла
Для разблокировки подаваемого состояния (subsys) необходимо удалить файл PID, который часто находится в /var/run/nscd/nscd.pid
. Используйте следующую команду:
sudo rm -f /var/run/nscd/nscd.pid
После этого повторно запустите nscd:
sudo service nscd start
3. Проверка кэша
Проблемы с кэшем могут также привести к сбоям. Рекомендуется очистить директорию кэша nscd, которая обычно хранится в /var/cache/nscd
. Удалите все файлы из этой директории:
sudo rm -rf /var/cache/nscd/*
После этого попробуйте снова запустить сервис:
sudo service nscd start
4. Диагностика с использованием strace
Если nscd по-прежнему не запускается, имеет смысл использовать утилиту strace
для диагностики. Выполните следующую команду для отслеживания системных вызовов:
strace -f /usr/sbin/nscd
Это может дать полезную информацию о том, какие системные вызовы вызывают сбой.
5. Проверка свободного места
Если ваш сервер исчерпал свободное место на диске, это может стать причиной сбоя nscd. Убедитесь в том, что на всех разделах достаточно места:
df -h
Если места недостаточно, вам следует очистить ненужные файлы или расширить разделы.
6. Альтернативные решения
Если nscd продолжает быть нестабильным, рассмотрите возможность использования более мощного решения, такого как bind-chroot
. С помощью yum
установите этот пакет и настройте /etc/resolv.conf
, чтобы указать на 127.0.0.1
:
sudo yum install bind-chroot
Это обеспечит более надежный кэш DNS по сравнению с nscd.
Заключение
Ваша проблема может быть решена путем удаления заблокированного PID-файла, очистки кэша и диагностики с помощью strace
. Если указанные шаги не разрешают ситуацию, возможно, стоит рассмотреть более устойчивую альтернативу для кэширования DNS-запросов. Правильный подход к устранению неисправностей поможет вам обеспечить бесперебойную работу вашего сервера и избежать проблем с устаревшими записями DNS.