Скрипт Python MOTD не работает с символом градуса °

Таким образом, вы, кажется, хотите, чтобы эти процессы продолжали работать бесконечно, т. е. они являются служебными процессами -, которые были запущены внутри вложенной среды chroot. Это скорее говорит о том, что вы запускаете сервисный процесс из своей оболочки, а не из systemd.

В общем, это плохо, и вы захотите этого избежать.

CentOS 7 использует systemd, работает как PID 1 и управляет системными службами. Очевидно, что PID 1 основной системы не работает внутри вашего chroot. Обычно, когда вы запрашиваете запуск процесса системной службы, он отделяется от PID 1, чтобы обеспечить чистую среду (, настроенную в соответствии с соответствующим .serviceюнит-файлом ). (Сюда входят устаревшие скрипты sysvinit. Они импортируются в автоматически -сгенерированные .serviceфайлы ).

(Чтобы проиллюстрировать это далее, :технически возможно запустить chroot, где вы привязываете -монтирование к сокету для связи с systemd и используете команды внутри chroot для управления службами хост-системы ).

Проблема не только в том, что ваш подход теряет преимущества systemd. Значит вы путаете службу systemd, если она есть для этого демона. Например, служба может отображаться как не запущенная(service foo status). Если позже вы попытаетесь service foo restart... systemd не будет знать, что есть демон, который нужно остановить, и вместо этого попытается запустить второй экземпляр демона. Это немного сбивает с толку для отладки!Часто вы сразу получаете приятное сообщение об ошибке о том, что не можете запустить свой веб-сервер, потому что уже есть другая программа, прослушивающая TCP-порт 80 :), но в других случаях вы можете получить два разных экземпляра демона, которые думают, что они должны быть единственным, совершая ошибки, на которые требуется больше времени, чтобы их заметить.

1
21.04.2020, 06:33
1 ответ

Как я и подозревал, проблема оказалась в кодировке. Я нашел аналогичный вопрос для кодирования в MOTD с ответом, который мне нужен здесь :https://serverfault.com/a/207357Когда я запустил команду для проверки переменной среды LANGиз моего журнала -в консоли, я получил значение:

$ echo $LANG
C.UTF-8

Но если я поместил ту же команду в свой скрипт MOTD (bash ), LANGбыл пуст, когда я вошел в систему. Я предполагаю, что в этом случае по умолчанию будет ASCII, что вызвало бы проблемы при кодировании. символ степени.

Чтобы решить проблему, в моем скрипте мне просто нужно было добавить строку:

export LANG="C.UTF-8"

Я поместил эту строку в скрипт bash, который затем вызывает мой скрипт python. Я не мог заставить его работать в скрипте Python с помощью командыos.environ['LANG'] = "C.UTF-8"

1
19.03.2021, 02:27

Теги

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