Задача: при старте юнита надо динамически сформировать параметры его окружения. Одно из решений приводится в Using Environment Variables In systemd Units:
Сначала один сервис создаёт файл с переменными окружения:
cat fleet_machines.service
[Unit]
Description=Generates /etc/fleet_machines.env file
After=etcd2.service
Requires=etcd2.service
After=fleet.service
Requires=fleet.service
[Service]
Type=oneshot
ExecStart=/usr/bin/sh -c "/usr/bin/echo -n FLEET_MACHINES= > /etc/fleet_machines.env"
ExecStart=/usr/bin/sh -c "/usr/bin/fleetctl list-machines -fields='ip,machine' -no-legend=true -full=true | tr '\t' '=' | tr '\n' ',' >> /etc/fleet_machines.env"
затем второй юнит запускает сам сервис, при этом второй юнит ззапускается только после первого:
cat container.service
[Unit]
Description=My test Docker container
After=docker.service
Requires=docker.service
After=fleet_machines.service
Requires=fleet_machines.service
[Service]
EnvironmentFile=/etc/fleet_machines.env
ExecStartPre=-/usr/bin/docker kill %p
ExecStartPre=-/usr/bin/docker rm %p
ExecStartPre=/usr/bin/docker pull ubuntu:latest
ExecStart=/usr/bin/docker run --rm --name %p -e FLEET_MACHINES ubuntu:latest bash -c 'while true; do echo "$FLEET_MACHINES"; sleep 1; done'
Там же есть и другие варианты.
Leave a Reply
You must be logged in to post a comment.