次のサービス定義があるとします。
[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