问题: 我的 systemd 服务没有将标志正确传递给 golang 二进制文件。
我有以下设置:
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