Ubuntu 12.04: pam_motd иногда отображает только частичный MOTD

Это не очень грандиозное предприятие, но оно действительно раздражает меня так или иначе.

У нас есть большое количество машин под управлением Ubuntu 12.04 (server/amd64) который я часто ssh в. У нас есть стандартная установка для этой версии Ubuntu, где существует горстка сценариев в /etc/update-motd.d это используется для создания MOTD, и /etc/pam.d/sshd настроен для печати MOTD на входе в систему ssh через pam_motd.so. Наши сценарии MOTD являются все пользовательскими (у нас нет ни одного из встроенных Ubuntu на этих машинах), но все остальное - абсолютно запас конфигурация сервера Ubuntu. По большей части это хорошо работает.

Однако время от времени MOTD отображен только частично (или иногда нисколько). Нет никакого сообщения об ошибке или на терминале или ни в каких журналах, которые я могу найти, это просто не отображает полный вывод. Если я cat /var/run/motd сразу после того, как это происходит, тот файл действительно показывает полное (и актуальный) вывод, все же.

Я знаю это run-parts имеет опцию прекратить обрабатывать сценарии, если один из них выходит с a> из 0 состояний, но я не думаю, что это применимо в этом случае — часто, вывод является усеченным посреди выполнения сценария. Например, один сценарий мог бы распечатать некоторые строки как это:

mycompany header

hostname uname
cpu
ram
uptime

Но MOTD сразу остановится после mycompany header. Это очень простые сценарии удара, и мы не имеем -e опция включила в них, таким образом, я не знаю, как это может даже произойти. Сначала я думал, что, возможно, был предел на количество времени, что PAM будет ожидать MOTD, который будет сгенерирован, и что, возможно, иногда (в зависимости от загрузки или безотносительно) мы могли бы поражать тот предел — но это, кажется, не имеет место. MOTD печатается почти сразу каждый раз, является ли это усеченным или нет.

Единственная другая вещь, о которой я могу думать, является этим, возможно, run-parts пишет динамическому файлу MOTD одну строку за один раз, и существует некоторое состояние состязания где pam_motd читает неполную версию того файла.

Однако я не могу подтвердить, что, потому что я понятия не имею, что механизм находится позади этой функциональности. Мое понимание - то, что PAM так или иначе исчерпывает run-parts для обновления файла на входе в систему но я не могу найти ссылки на run-parts или /etc/update-motd.d в источнике PAM. Весь pam_motd код, кажется, делает, просто читается в файле MOTD.

Единственное возможно полезная подсказка, которую я мог найти, является этим: Если я делаю watch -n 0.1 'ps aux | grep "run-parts"' в одном окне терминала, поскольку я разъединяюсь и снова соединяюсь с тем же хостом в другом окне, я вижу, что, когда вывод завершен, всегда существует несколько процессов, которые появляются очень кратко в списке процессов — но когда это является усеченным, существуют только один или два процесса (иногда ни один вообще).

править: Я должен также добавить, что не могу копировать эту проблему вообще, когда я выполняюсь run-parts --lsbsysinit /etc/update-motd.d вручную; это только, кажется, происходит при входе в систему ssh.

Как я могу диагностировать это далее? Как PAM дает системе команду обновлять MOTD? Это ожидает того процесса для окончания, или это работает одновременно? Существует ли способ изменить то поведение? Существует ли параметр отладки, который я могу установить где-нибудь, чтобы, по крайней мере, видеть то, что происходит? Есть ли любая ожидаемая причина это run-parts мог бы прерваться посреди сценария?

удачи

1
задан 4 September 2014 в 20:33

0 ответов

Другие вопросы по тегам:

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