我有一个此嵌入式单元:
# /etc/systemd/system/prometheus-node-exporter.service.d/override.conf
[Service]
Environment=ARGS=--web.listen-address=localhost:9101
相对于Debian软件包prometheus-node-exporter
(stretch-backports
版本)中的该单元:
# /lib/systemd/system/prometheus-node-exporter.service
[Unit]
Description=Prometheus exporter for machine metrics
Documentation=https://github.com/prometheus/node_exporter
[Service]
Restart=always
User=prometheus
EnvironmentFile=/etc/default/prometheus-node-exporter
ExecStart=/usr/bin/prometheus-node-exporter $ARGS
ExecReload=/bin/kill -HUP $MAINPID
TimeoutStopSec=20s
SendSIGKILL=no
[Install]
WantedBy=multi-user.target
/etc/default/prometheus-node-exporter
设置ARGS=""
,即应用节点导出器的默认端口9100。该插件旨在将其更改为9101,并让服务仅在localhost
上侦听。
systemctl start prometheus-node-exporter
之后,服务在:::9100
(tcp6
)上侦听。但是,如果我在单元文件中将EnvironmentFile
注释掉,它会按照我的意愿在127.0.0.1:9101
(tcp
)上侦听。因此,似乎该单元中的EnvironmentFile
在插入单元中的优先级高于Environment
。
在选择ARGS
的值时,为什么插入项不会覆盖单位?我缺少什么,可以使用自定义插入单元更改默认的监听地址吗?
答案 0 :(得分:2)
来自man systemd.exec
:
EnvironmentFile = ... 这些文件中的设置将覆盖使用Environment =进行的设置。如果从这些文件中两次设置了相同的变量,则 文件将是 按指定顺序读取,以后的设置将覆盖以前的设置。
因此,您需要指定一个EnvironmentFile
来覆盖单位文件中的设置:
# /etc/systemd/system/prometheus-node-exporter.service.d/override.conf
[Service]
EnvironmentFile=/etc/prometheus.conf
和实际配置:
# cat /etc/prometheus.conf
ARGS=--web.listen-address=localhost:9101