У нас есть юнит-файл, который:
использует ExecStartPre который генерирует файл конфигурации
ExecStart использует файл конфигурации для запуска службы
ExecStartPost который удаляет файл, созданный ExecStartPre. (файл имеет жестко закодированные пароли, и мы не хотим хранить его на диске, поэтому он должен существовать только во время запуска или перезапуска службы.
Если служба запущена успешно, она должна удалить файл конфигурации, если служба не запускается, она также должна удалить файл.
это системный файл:
[Ед. изм]
Описание=Сервер Prometheus
Документация=https://prometheus.io/docs/introduction/overview/
After=network-online.target
[Оказание услуг]
Пользователь=проммгр
Группа=секапм
Перезапуск = при сбое
ExecStartPre=/usr/bin/python2 /prom/config/anon_yml.py
ExecStart=/bin/sh -c "/prom/appl/prometheus/prometheus --config.file=/prom/config/prometheus.yml --storage.tsdb.path=/prom/data --web.listen-address =127.0.0.1:9090 --storage.tsdb.retention.time=1825d &>>/prom/logs/prometheus.log"
ExecStartPost=/usr/bin/python2 anon_yml.py --удалить
[Установить]
WantedBy=многопользовательская.цель
рассматриваемый файл конфигурации prometheus.yml
сценарий anon_yml.py создаст файл из шаблона jinja и заполнит его необходимыми паролями.
ExecStart затем запустит службу
в теории ExecStartPost затем удалит файл prometheus.yml с диска после завершения ExecStart, однако, когда служба перезапускается, у меня возникают ошибки, связанные с отсутствием файла конфигурации. это только означает, что ExecStartPost не ждал завершения ExecStart.
Как убедиться, что файл конфигурации удаляется только после того, как процесс уже был перезапущен?