I am trying to pass an environment variable defined in the current shell to one of the
systemd unit I am writing.
I am using this in a python script which is running as a service. My
systemd unit will run this script as a unit making use of the variable for its working.
[Unit] Description=device-CompStatus: Computes device availability status [Service] Type=simple ExecStart=/usr/bin/bash -c "/usr/bin/python /opt/deviceCompStatus/deviceCompStatusHandler.py" Restart=always [Install] WantedBy=default.target
The way am using the variable in Python script would be
if os.environ.get('DB_URL') is not None: dbEndPoint = "http://" + os.environ['DB_URL']
The problem is am not able to use the variable when running the script in
systemd. I looked up couple of resources Using environment variables in systemd units, it says to use assignment under
[Service] directly as
As you can see, my
DB_URL could change depending upon the environment I am deploying my machine, it could be a developer, or a production setup, in which the URLs would vary.
How do I do this dynamically? i.e. pass whatever value available to
I also tried using the
EnvironmentFile= option to define a file and pass it to service. But the same problem again, my variable could be dynamic and cannot be hardcoded.
After using the option
systemctl import-environment DB_URL
I am able to see the variable available in the environment of
systemd which I confirmed by
systemctl show-environment DB_URL=databus.dev.mysite.io:8080 LANG=en_US.UTF-8 PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
but still the value is not reflected in the
python application which I run. Is
os.environ('DB_URL') a wrong way to access the variable?