Вопрос: Как установить переменные среды для сервиса systemd MySQL Server?
Существует множество различных методов, которые можно использовать для установки переменных среды для службы systemd.
Используемый метод может различаться в зависимости от дистрибутива Linux и его версии.
В руководстве MySQL говорится, что настройка сервиса выполняется просто (пример):
[Service] LimitNOFILE=max_open_files PIDFile=/path/to/pid/file Nice=nice_level LimitCore=core_file_limit
Метод 1 – Использование «systemd edit»
Это предпочтительный метод, который заключается в создании и / или редактировании файла override., который содержит переменные среды.
Команда для создания / редактирования файла override.:
# systemctl edit mysqld
Затем будет создан каталоге и файл override.conf, который будет содержать переменные. например
[Service] Environment="TZ=time_zone_setting" Environment="AUTHENTICATION_PAM_LOG=1" Environment="LD_PRELOAD=/path/to/malloc/library"
Файл и каталог override.conf обычно будут следующими : /etc/systemd/system/mysqld.service.d/override.conf
Способ 2 – Добавить несколько переменных через файл
Этот метод позволяет добавить несколько переменных среды сервису через простой файл.
[Service] LimitNOFILE=max_open_files PIDFile=/path/to/pid/file Nice=nice_level LimitCore=core_file_limit EnvironmentFile=-/etc/sysconf/mysqld
Символ ‘- at в начале значения EnvironmentFile позволяет позволить systemd игнорировать ошибки, если файл не существует.
Файл среды будет просто иметь список различных переменных в формате имя = значение. Например:
LD_PRELOAD=/path/to/malloc/library TZ=time_zone_setting AUTHENTICATION_PAM_LOG=1
Файл среды может быть любым, как определено атрибутом EnvironmentFile в сервисе, однако он может зависеть от версии Linux.
Некоторые старые версии требуют, что файл будет в /etc/sysconf (для дистрибутивов на основе Redhat) по сравнению с /etc/default (для дистрибутивов на основе Debian).
Этот метод в настоящее время используется пакетами Oracle MySQL.
Способ 3 – Добавить переменные среды напрямую
Добавления настройки name=value в секцию [Service] файла службы mysql.
[Service] LimitNOFILE=max_open_files PIDFile=/path/to/pid/file Nice=nice_level LimitCore=core_file_limit Environment="LD_PRELOAD=/path/to/malloc/library"
Ключевое слово «Environment» здесь используется для того, чтобы определить, какая переменная среды указана.
В приведенном выше параметре переменная среды определена для использования другой библиотеки malloc для MySQL Server.
2 комментария
Прошу прощения, надо было сформулировать более развернутый вопрос. Могу ли я при помощи systemd организовать мета сервис, который бы при запуске генерировал конфиги для компонент и запускал бы их, перезапускал компоненты в случае их аварийного завершения, при остановке мета сервиса останавливал бы запущенные компоненты и удалял бы сгенерированные конфиги? Я хочу зарегистрировать в systemd только метасервис, работа с компонентами должна происходить автоматически без человеческого вмешательства. Что произойдет, если при запущенном метасервисе машина внезапно уйдет на перезагрузку? При следующем старте компоненты будут запущены даже если метасервис запускается в ручном режиме? Отдельный вопрос: может ли systemd проверять живость сервиса при помощи сетевого запроса?
Это тема отдельной статьи 🙂