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

Это не очень большое дело, но это действительно как-то меня раздражает.

У нас есть большое количество машин с Ubuntu 12.04 (server/amd64), на которые я часто захожу. У нас есть стандартная установка для этой версии 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 имеет возможность остановить обработку сценариев, если один из них завершается со статусом>0, но я не думаю, что это применимо в этом случае - часто выходные данные усекаются в середине выполнения сценария. Например, один скрипт может распечатать несколько строк, например:

mycompany header

hostname uname
cpu
ram
uptime

Но MOTD остановится сразу после mycompany header, Это очень простые скрипты bash, и у нас нет -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 может прервать в середине сценария?

ура

0 ответов

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