Как заняться расследованиями, причина общего количества зависают?

Строка хижины (от “резкого удара”, т.е. #!) обрабатывается ядром. Ядро не хочет знать о переменных среды такой как PATH. Таким образом, имя на строке хижины должно быть полным путем к исполняемому файлу. Можно также указать дополнительный аргумент для передачи тому исполняемому файлу перед названием сценария (с системно-зависимыми ограничениями, в которые я не войду здесь). Например, для сценария Python, можно указать

#!/usr/bin/python

на первой строке, и когда Вы выполните сценарий, на самом деле выполнится ядро /usr/bin/python /path/to/script. Но это не удобно: необходимо указать полный путь команды. Что, если Вы имеете python в /usr/bin на некоторых машинах и /usr/local/bin на других? Или Вы хотите установить Ваш PATH кому: /home/joe/opt/python-2.5/bin чтобы использовать определенную версию Python? Так как ядро не сделает PATH поиск для Вас, идея состоит в том, чтобы заставить ядро выполнить команду, которая по очереди ищет желаемый интерпретатор в PATH:

#!/fixed/path/to/path-lookup-command python

Это path-lookup-command должен взять название исполняемого файла как аргумент и искать его в PATH и выполните его: ядро будет работать /fixed/path/to/path-lookup-command python /path/to/script. Как это происходит, env команда делает просто это. Его основная цель состоит в том, чтобы выполнить команду с другой средой, но так как она ищет название команды в $PATH, это идеально подходит для нашей цели здесь.

Хотя это официально не гарантируется, исторические обеспеченные системы Unix env в /usr/bin, и современные системы сохранили то местоположение точно из-за широкого использования #!/usr/bin/env. Так, на практике способ указать, что сценарий должен быть выполнен любимым интерпретатором Python пользователя,

#!/usr/bin/env python

19
09.04.2011, 08:01
2 ответа

Ответ Frederik, вовлекающий волшебный SysRq и дампы ядра, будет работать, если ядро будет все еще работать, и не действительно подвешенное. Ядро могло бы просто быть занятым цикличным выполнением по некоторым причинам.

То, что это не отвечает на Ctrl-Alt-Del, говорит мне, который, вероятно, не имеет место, и что машина запирается трудно. Это означает отказ оборудования или что-то тесно связанное, как плохой драйвер.

Ваше контрольное испытание памяти хорошо, если Вы позволяете ему работать достаточно долго. Необходимо также попробовать другие вещи попытаться подчеркнуть систему, как StressLinux. Продолжительные сравнительные тесты хороши, также.

Другая вещь попробовать загружает систему с Ubuntu живой CD и пытается использовать систему в качестве нормальной. Если возврат Ubuntu временно как этот не заставляет проблему повторяться, существует хороший шанс, это на самом деле не повредило аппаратные средства, но одну из связанных вещей как плохой драйвер или неправильно настроило ядро. Довольно возможно, что более популярное распределение как Ubuntu могло иметь более стабильную конфигурацию ядра, чем одна как Arch, просто из-за большего количества машин, это было испытано во время фазы тестирования дистрибутива.

7
27.01.2020, 19:45
  • 1
    I believ, что Ctrl-Alt-Delete обрабатывается init, таким образом, он не может работать, даже если ядро все еще делает. OTOH AFAIR ядро не ожидает ключей SysRq после паники. –  jpc 23.03.2011, 14:40
  • 2
    Это возможно. Для различения случаев поместить ctrlaltdel hard в Вашем /etc/rc.local файл. Когда система запрется, попробуйте Ctrl-Alt-Del. Если это все еще ничего не делает, Вы знаете наверняка, что ядро больше не работает; у Вас есть отказ аппаратных средств или драйвера. –  Warren Young 23.03.2011, 15:04
  • 3
    у меня были ядра, отвечает на Волшебство ключи SysRq даже при том, что это было испугано. Надлежащая установка kdump сервиса должна гарантировать, что полностью втиснутые начальные загрузки системы в kdump ядро, таким образом, это должно в конечном счете вернуться. –  jsbillings 23.03.2011, 15:05
  • 4
    После быстрого вводят по абсолютному адресу через код обработки клавиатуры ядра, он смотрит на меня как Ctrl-Alt-Del, и волшебные SysRq обрабатываются на том же уровне: если Вы работаете, другое желание. init (1) вопрос/SIGINT является отдельным, и имеется дело с путем установки обработки Ctrl-Alt-Del, чтобы сделать "жесткую" перезагрузку, как упомянуто в моем другом комментарии. –  Warren Young 23.03.2011, 15:22

Относительно замораживания существует несколько опций:

  • использование последовательного порта, если поле имеет для получения дампа там путем добавления console=ttyS0 к параметрам загрузки, как описано здесь. Вам нужны вторая машина с последовательным портом и нуль-модемный кабель для ловли файла дампа.

  • с помощью netconsole для получения дампа по сети посмотрите здесь.

  • Используя kexec/kdump таким образом Вы получаете локальный дамп, видите здесь.

Относительно чистой энергии от проблемы я предлагаю, чтобы Вы использовали волшебный ключ SysRq к 'S'ync диски, 'U'mount их, и затем re'B'oot поле (буквы - те, необходимо ввести наряду с alt-sysrq.

Править: При регистрации ООП/трассировки на lkml необходимо использовать недавнее (предпочтительно последнее) версия ядра и никаких собственных модулей.

11
27.01.2020, 19:45
  • 1
    я могу вообразить много молодой речи, говорящей, "Что такое последовательный порт, дедушка?" На самом деле я не думаю, что эта машина даже имеет тот. –  DarenW 25.03.2011, 02:45
  • 2
    я не забываю читать что-то о SysReq несколько лет назад. Если только я мог бы погуглить его, когда машина неисправна! Угадайте, что я должен начать действовать, настроив вторую машину... –  DarenW 25.03.2011, 02:46

Теги

Похожие вопросы