systemd 从文件中读取变量

问题描述 投票:0回答:0

问题: 我的 systemd 服务没有将标志正确传递给 golang 二进制文件。

我有以下设置:

  • 脚本 1. 从本地文件中提取值并将变量导出到文件中。
if [[ -n "${AGENT_ENV_FILE}" ]]; then
    ENV_FILE_CONTENT=$(cat "${TEMP_ENV_FILE}")
    ADDITIONAL_FLAGS=""
    file_contents=(${ENV_FILE_CONTENT// / })
    for item in "${file_contents[@]}"
    do
      if [[ "${item}" == *"--"* ]]; then
        ADDITIONAL_FLAGS+="${item} "
      fi
    done
    ADDITIONAL_FLAGS="${ADDITIONAL_FLAGS% }"
fi
env | sort > /opt/staging.env
  • 脚本使用

    /opt/staging.env
    HEALTH_PATH
    HEALTH_INTERVAL_SECONDS
    填充
    ADDITIONAL_FLAGS
    文件。

  • systemd 服务从

    EnvironmentFile=/opt/staging.env
    读取并提取值以填充
    /opt/bin/agent

    的执行
[Unit]
Description=My Service
StartLimitIntervalSec=600

[Service]
StartLimitBurst=0
Type=simple
EnvironmentFile=/opt/staging.env
ExecStart=/opt/bin/agent --health-path=${HEALTH_PATH} --health-interval-seconds=${HEALTH_INTERVAL_SECONDS} "${ADDITIONAL_FLAGS}"
Restart=on-failure

[Install]
WantedBy=multi-user.target

在执行过程中,我看到了正确的值:

ps -ef | grep agent
显示正确的值。

 /opt/bin/agent--health-path=/health --health-interval-seconds=30 --session-name=_sess --forward-id=true --rewrite-host=true

/opt/staging.env

ADDITIONAL_FLAGS=--session-name=_sess --forward-id=true --rewrite-host=true

我的golang程序没有读取这些变量。 如果我手动输入:

--session-name=_sess --forward-id=true --rewrite-host=true
并删除 ${ADDITIONAL_FLAGS} 一切正常:

ExecStart=/opt/bin/agent --health-path=${HEALTH_PATH} --health-interval-seconds=${HEALTH_INTERVAL_SECONDS} --session-name=_sess --forward-id=true --rewrite-host=true

手动操作:

export ADDITIONAL_FLAGS="--session-name=_sess --forward-id=true --rewrite-host=true"
/opt/bin/agent --health-path=/health --health-interval-seconds=30 ${ADDITIONAL_FLAGS}`

我看到的唯一区别是我在文件中看到:

ADDITIONAL_FLAGS=--session-name=_sess --forward-id=true --rewrite-host=true

与手动

ADDITIONAL_FLAGS="--session-name=_sess --forward-id=true --rewrite-host=true"

有什么建议吗? 不知道为什么会这样......?

Debian 10
4.19.0-23-cloud-amd64 #1 SMP Debian 4.19.269-1 (2022-12-20) x86_64 GNU/Linux
shell debian systemd
© www.soinside.com 2019 - 2024. All rights reserved.