[comment]: # ({39c4b215-26ad891b})
# 10 Переменные среды

[comment]: # ({/39c4b215-26ad891b})

[comment]: # ({5b980b7e-72128caf})
#### Обзор

Переменные среды позволяют настраивать компоненты Zabbix без жесткого задания значений в файлах конфигурации.
Это упрощает управление конфигурациями в динамических средах, таких как Docker, где переменные можно передавать во время выполнения, чтобы адаптировать систему к разным сценариям.

В простейшем случае, задав значение параметра конфигурации [DebugLevel](/manual/appendix/config/zabbix_server#debuglevel) для сервера Zabbix через переменную среды, вы можете использовать ее для настройки сервера при запуске:

```bash
# Файл конфигурации сервера Zabbix:
DebugLevel=${NEW_DEBUG_LEVEL}

# Запуск сервера Zabbix:
NEW_DEBUG_LEVEL=5 /usr/sbin/zabbix_server
```

Переменные среды поддерживаются следующими компонентами Zabbix:

-   [Сервер](/manual/appendix/config/zabbix_server)
-   [Прокси](/manual/appendix/config/zabbix_proxy)
-   Агент ([UNIX](/manual/appendix/config/zabbix_agentd) или [Windows](/manual/appendix/config/zabbix_agentd_win))
-   Агент 2 ([UNIX](/manual/appendix/config/zabbix_agent2) или [Windows](/manual/appendix/config/zabbix_agent2_win)), включая [плагины](/manual/appendix/config/zabbix_agent2_plugins)
-   [Веб-сервис](/manual/appendix/config/zabbix_web_service)
-   Zabbix sender (при использовании [опции -c, --config](/manpages/zabbix_sender#options))

[comment]: # ({/5b980b7e-72128caf})

[comment]: # ({8d252f3a-7598ffff})
#### Важные примечания

-   Если для параметра конфигурации задана переменная среды, которая не указана при запуске компонента, используется значение параметра по умолчанию.
-   При использовании [команд во время выполнения](/manual/concepts/agent#runtime-control) (например, для увеличения уровня журнала агента) необходимо указывать все ранее использовавшиеся переменные среды. Это связано с тем, что компоненты Zabbix используют свой файл конфигурации для выполнения команд во время выполнения; если переменные среды опущены, будут использованы значения параметров конфигурации по умолчанию. См. [Примеры](#examples).
-   Команда во время выполнения `userparameter_reload` [runtime command](/manual/concepts/agent#runtime-control) не поддерживает повторную загрузку переменных среды. Во время перезагрузки переменные игнорируются, и перезагружаются только параметры с обычными значениями.
-   Текущие переменные среды процесса, которые использовались в файлах конфигурации, очищаются после запуска компонента Zabbix. Это гарантирует, что дочерние процессы (например, удаленные скрипты, выполняемые Zabbix) не смогут получить доступ к этим переменным. Однако обратите внимание, что начальные переменные процесса по-прежнему можно получить (например, через файл `/proc/<PID>/environ`).

[comment]: # ({/8d252f3a-7598ffff})

[comment]: # ({c33cd6ee-5d8ec091})
#### Синтаксис

Переменные среды должны использовать следующий синтаксис: ${буквенно-цифровые_символы/подчеркивания}.

Имя переменной может содержать только буквы (a-z, A-Z), символы подчеркивания (\_), и цифры (0-9), и не должно начинаться с цифры.

Переменные, которые не соответствуют требуемому синтаксису или объединены с обычным значением, будут рассматриваться как обычные значения, что может привести к ошибкам.

Правильный синтаксис переменной:

```ini
DebugLevel=${NEW_DEBUG_LEVEL}
Hostname=${ZBX_HOSTNAME}
LogFile=${LogFile_001}
```

Неправильный синтаксис переменной:

```ini
DebugLevel=${5_DebugLevel}
Hostname=${ZBX.HOSTNAME 1}
LogFile=/${HOME}/zabbix/zabbix_server.log
```

::: noteclassic
В Windows имена переменных среды не чувствительны к регистру.
:::

[comment]: # ({/c33cd6ee-5d8ec091})

[comment]: # ({b319b360-c638a080})
#### Примеры

Следующие примеры показывают, как настроить и использовать переменные среды с компонентами Zabbix.

[comment]: # ({/b319b360-c638a080})

[comment]: # ({78b82896-0382a339})
##### Пример 1: Настройка и тестирование агента Zabbix

1\. Задайте переменные среды в файле конфигурации агента:

```ini
Hostname=${ZBX_HOSTNAME}
ServerActive=${ServerActive}
```

2\. Проверьте файл конфигурации:

```bash
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf --test-config
```

3\. Запустите агент с переменными среды:

```bash
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
```

При использовании [команд во время выполнения](/manual/concepts/agent#runtime-control) (например, для увеличения уровня логирования агента) необходимо указывать все ранее использованные переменные среды:

```bash
ZBX_HOSTNAME="New Zabbix agent" ServerActive=127.0.0.1 /usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R log_level_increase
```

Это связано с тем, что агент использует свой файл конфигурации для выполнения команд во время выполнения; если переменные среды не указаны, будут использованы значения параметров конфигурации по умолчанию.

Кроме того, после задания переменных среды в файле конфигурации агента вы можете сделать их доступными для процессов (например, с помощью команды `export`).
Это снижает риск неожиданного поведения из-за отсутствующих или неверно заданных переменных.

```bash
export ZBX_HOSTNAME="New Zabbix agent"
export ServerActive=127.0.0.1
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf --test-config
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf
/usr/sbin/zabbix_agentd -c /etc/zabbix/zabbix_agentd.conf -R log_level_increase
```

[comment]: # ({/78b82896-0382a339})

[comment]: # ({6e772927-6852ff3f})
##### Пример 2: Настройка агента Zabbix для контейнера

Если вы создаете и настраиваете собственный пользовательский образ для компонентов Zabbix (например, агента Zabbix), вы можете задать параметры конфигурации с помощью переменных среды, а затем запустить контейнер с этими переменными.

1\. При подготовке образа задайте переменные среды в файле конфигурации агента:

```ini
Hostname=${ZBX_HOSTNAME}
BufferSize=${BUFSZ}
ListenPort=${LISTENPORT}
UserParameter=${_UsrPar01}
UserParameter=${_UsrPar02}
```

2\. После сборки образа контейнера запустите контейнер агента (например, Docker) с переменными среды:

```bash
docker run --name my-zabbix-agent -e ZBX_HOSTNAME="new-hostname" -e BUFSZ=1000 -e LISTENPORT=20050 -e _UsrPar01="key1,ls" -e _UsrPar02="key2,pwd" --init -d my-zabbix-agent:latest
```

3\. При использовании [команд времени выполнения](/manual/concepts/agent#runtime-control) (например, для увеличения уровня журнала агента) откройте shell контейнера и выполните команду времени выполнения:

```bash
docker exec -it <containerid> sh
/usr/sbin/zabbix_agentd -R log_level_increase
```

::: noteimportant
Команда времени выполнения `userparameter_reload` не поддерживает повторную загрузку переменных среды.
Во время повторной загрузки переменные игнорируются, и перезагружаются только параметры с обычными значениями.
:::

[comment]: # ({/6e772927-6852ff3f})
