假设我有一个类似的服务定义:
[Unit]
Description=ES log capture
After=network.target
StartLimitIntervalSec=0
[Service]
Environment=emit_only_json=yes
Environment=ec2_logging_machine_ip=ec2-18-xxx-66-xxx.us-west-2.compute.amazonaws.com
Type=simple
Restart=always
RestartSec=1
User=root
ExecStart=/home/ubuntu/repos/es-app/syslog-exec.sh
[Install]
WantedBy=multi-user.target
但我希望ec2_logging_machine_ip
环境变量根据该服务运行的机器而有所不同。以下是该服务运行的 bash 脚本:
#!/usr/bin/env bash
set -eo pipefail
cd "$(dirname "$BASH_SOURCE")"
export interos_emit_only_json='nope'
export interos_ec2_logging_machine_ip='ec2-18-xxx-66-xxx.us-west-2.compute.amazonaws.com'
tail -n 100 -f '/var/log/syslog' | node . &> /dev/null
我还可以将环境变量放在那里。也许答案是改变.bashrc
这台机器的?还有其他潜在的解决方案吗?
答案1
改变 ~/.bashrc 然后在我的 ExecStart 脚本中获取它不起作用,但使用它确实有效:
[Service]
EnvironmentFile=/home/ubuntu/myenvs/es-service.env