1. )Если ваш дистрибутив Linux использует journald
в полной мере, не будет легко читаемого традиционного файла журнала, как упоминалось @JdeBP . Файл журнала использует двоичный формат и не может быть легко проанализирован традиционными инструментами файла журнала.
2. )Если journalctl -u {service}
содержит нужную вам информацию, вы можете использовать journalctl -f -u {service}
и направить вывод в программу, которая анализирует журнал и запускает все необходимые реакции. Все остальное, скорее всего, будет зависеть от выбранного вами дистрибутива Linux.
Например, Debian 9 (Stretch )в конфигурации по умолчанию journald
поддерживает традиционный входной сокет системного журнала /dev/log
. Но если rsyslogd
установлен, journald
настроен на пересылку входящих сообщений системного журнала на него.
В других дистрибутивах Linux связь между journald
и традиционным демоном системного журнала может иметь другую структуру.
Вы должны добавить локаль в /etc/locale.gen
, построить ее, и тогда вы сможете ее использовать:
$ sudo echo "en_US.UTF-8 UTF-8" | sudo tee -a /etc/locale.gen
$ sudo locale-gen
Вы можете поместить эти команды в свой файл докера.
Проблема, которую вы видите, заключается в том, что по умолчанию в контейнер Docker не встроены никакие локали, кроме C
(, также известной какPOSIX
)иC.UTF-8
(версии UTF -8 ). Это связано с тем, что glibc поставляется с огромным количеством локалей, которые занимают приличное количество места, а Debian и Ubuntu для экономии места поставляют только сжатые версии в пакете locales
, требуя, чтобы в системе были созданы определенные локали.
Если вы просто ищете англоязычную локаль с UTF -8, тогда C.UTF-8
может удовлетворить ваши потребности и избежать необходимости создавать новую локаль в вашем контейнере. Вы можете просто использовать LC_ALL=C.UTF-8 docker run -it test
.
Однако, если вам нужна англоязычная локаль США специально (, например, потому что вам по какой-то странной причине очень нравится система Avoirdupois и вы хотите использовать ее с LC_MEASUREMENT
), самым простым решением будет установка пакета locales-all
.. Это обеспечивает предварительно -собранные версии всех локалей.
В качестве альтернативы, если вам не хватает места, вы можете обновить свой Dockerfile, добавив эту строку:
RUN echo "en_US.UTF-8 UTF-8" > /etc/locale.gen && locale-gen
Это создаст именно ту локаль, которую вы хотите.
Окончательное решение состоит в том, чтобы ваш .bashrc
определял, действителен ли ваш языковой стандарт, и задавал для него что-то другое, если это не так. Поскольку, несмотря на то, что я являюсь носителем английского языка, я часто использую локаль французского -языка, которая не всегда доступна во всех системах, которые я использую, я принял этот подход. Вы можете запустить следующую команду,который выйдет из 0, если локаль $locale
существует и не равна нулю, если она не существует:
$ perl -MPOSIX=locale_h -E 'exit !setlocale(LC_ALL, $ARGV[0]);' "$locale" \
2>/dev/null