Рейтинг:0

systemd ExecStartPost выполняется слишком быстро

флаг fo

У нас есть юнит-файл, который:

использует 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.

Как убедиться, что файл конфигурации удаляется только после того, как процесс уже был перезапущен?

Рейтинг:0
флаг lk

используйте как флаг, чтобы проверить, может ли быть выполнено ваше действие Post или нет.

  • добавить к команде ExecStart:

&& коснитесь /tmp/флаг

  • замените ExecStartPost на:

тайм-аут 10 bash -c -- 'пока тест! -f /tmp/флаг; сделать /usr/bin/python2 anon_yml.py --delete && rm -f /tmp/flag ; спать 1; сделано'

это выглядит немного грязным, но должно работать ..

danidar avatar
флаг fo
да, но мне больше интересно узнать, почему systemd запускает его слишком рано? это из-за типа simple и того что ExecStart с /bin/sh -c.... Я действительно мог бы добавить сон и другие хаки, для каждой установки я могу добавить `&& rm -rf` к ExecStart.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.