У меня есть сервер, который я администрирую удаленно через SSH, по разным причинам его нужно перезапустить. Однако когда я пытаюсь это сделать, shutdown
переходит в непрерывный сон практически сразу после отправки настенного сообщения.
$ ps aux | grep 'shutdown'
root 4754 0.0 0.1 1888 720 ? D 07:26 0:00 shutdown -r 0 w
В настоящее время у меня нет физического доступа к машине. Что я должен делать? Сервер все еще отвечает, и я все еще могу войти в систему.
Включите ключ Magic SysRq с помощью:
echo "1" > /proc/sys/kernel/sysrq
и выполните чистую перезагрузку, выполнив следующие действия:
Состояние D не "мертвое", оно заблокировано в ожидании ввода-вывода диска.
Что-то вроде "reboot -n -f" более убедительно и может сработать. У вас проблемы с файловой системой? Команда shutdown записывает запись wtmp перед тем, как сообщить init о завершении работы.
Я видел, как завершение работы зависало, если есть (устаревшие) монтирования NFS или сервер подключен к SAN. Вот вам контрольный список:
df -h
(или иначе получить доступ к креплениям)?shutdown
в D
штат?dmesg
вернуть вам что-нибудь о вводе-выводе, или вас ждет даже небольшая симпатичная паника ядра?lsof
что на этом монтировании нет открытых файлов, а затем umount
это крепление?btrace
установлен, делает btrace /your/disk
что-то вернуть?Если все остальное не сработает, раздел SysRq, предоставляемый @quanta, должен работать, НО сначала убедитесь, что есть кто-то, кто может физически присматривать за сервером, если он по какой-то причине не загружается правильно.
shutdown
вероятно ждет, чтобы написать что-то вроде /dev/initctl
- использовать strace -p 4754
чтобы увидеть, где он висит, а затем исправить то, что сломано.