在 CentOS 7 服务器上,我正在为新服务 prometheus-slurm-exporter 从头创建新的 systemd 服务。(这是一个从 HPC 集群上的 SLURM 调度程序导出数据的应用程序。)默认情况下,它使用端口 8080,但由于该端口已被其他服务使用,因此我将其设置为使用端口 9090。从命令行运行,命令如下所示:
/opt/prometheus-slurm-exporter/bin/prometheus-slurm-exporter --listen-address="0.0.0.0:9090"
它可以从命令行正常运行,但我想从它创建一个 systemd 服务,因此我创建了以下文件 /etc/systemd/system/prometheus-slurm-exporter.service:
[Unit]
Description=SLURM Prometheus Exporter for Grafana
After=network.target syslog.target
[Service]
ExecStart=/opt/prometheus-slurm-exporter/bin/prometheus-slurm-exporter --listen-address="0.0.0.0:9090"
[Install]
WantedBy=multi-user.target
运行systemctl daemon-reload
后再执行systemctl start prometheus-slurm-exporter
,服务失败,报告未知端口:
Sep 30 12:21:14 ada prometheus-slurm-exporter: time="2021-09-30T12:21:14-04:00" level=info msg="Starting Server: \"0.0.0.0:9090\"" source="main.go:59"
Sep 30 12:21:14 ada prometheus-slurm-exporter: time="2021-09-30T12:21:14-04:00" level=fatal msg="listen tcp: address tcp/9090\": unknown port" source="main.go:62"
Sep 30 12:21:14 ada systemd: prometheus-slurm-exporter.service: main process exited, code=exited, status=1/FAILURE
Sep 30 12:21:14 ada systemd: Unit prometheus-slurm-exporter.service entered failed state.
Sep 30 12:21:14 ada systemd: prometheus-slurm-exporter.service failed.
为什么它是从命令行运行而不是作为 systemd 服务运行,并且为什么 systemd 无法识别端口 9090?
答案1
我已经回答了自己的问题。似乎您无法将命令行参数传递给 ExecStart。相反,我需要使用
EnvironmentFile=-/etc/default/prometheus-slurm-exporter
ExecStart=/opt/prometheus-slurm-exporter/bin/prometheus-slurm-exporter $OPTIONS
在环境文件中,我有
OPTIONS=--listen-address="0.0.0.0:9090"
现在工作正常。
答案2
虽然很旧,但以防其他人遇到此问题,请回答 - 您可以传递命令行参数,但引用并不像预期的那样:https://github.com/systemd/systemd/issues/624. 没有引号,例如这个可以正常工作:
ExecStart=/usr/local/bin/prometheus-slurm-exporter --listen-address=0.0.0.0:9341