Puncte:0

systemd ExecStartPost este executat prea repede

drapel fo

Avem un fișier unitar care:

utilizări ExecStartPre care generează un fișier de configurare ExecStart folosește fișierul de configurare pentru a porni un serviciu ExecStartPost care șterge fișierul creat de ExecStartPre. (fișierul are parole codificate și nu dorim să-l păstrăm pe disc. deci trebuie să existe doar în timp ce serviciul este pornit sau repornit.

Dacă serviciul este pornit cu succes, ar trebui să șterge fișierul de configurare, dacă serviciul nu reușește să pornească, ar trebui să ștergă și fișierul.

acesta este fișierul systemd:

[Unitate]
Descriere=Prometheus Server
Documentație=https://prometheus.io/docs/introduction/overview/
După=network-online.target

[Serviciu]
Utilizator=prommgr
Grupa=secapm
Restart=la eșec
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 --delete 

[Instalare]
WantedBy=multi-user.target

fișierul de configurare în cauză este prometheus.yml scenariul anon_yml.py va crea fișierul dintr-un șablon jinja și îl va popula cu parolele necesare. ExecStart va porni apoi serviciul

teoretic ExecStartPost ar elimina apoi fișierul prometheus.yml de pe disc după ce ExecStart s-a terminat, cu toate acestea, când serviciul este repornit, am erori de fișier de configurare care lipsește. înseamnă doar că ExecStartPost nu a așteptat până la terminarea ExecStart.

Cum să vă asigurați că fișierul de configurare este șters numai după ce procesul a fost deja repornit?

Puncte:0
drapel lk

utilizați ca un steag pentru a verifica dacă acțiunea dvs. Post poate fi executată sau nu.

  • adăugați la cmd-ul ExecStart:

&& atingeți /tmp/flag

  • înlocuiți ExecStartPost cu:

timeout 10 bash -c -- „în timp ce testează! -f /tmp/flag; face /usr/bin/python2 anon_yml.py --delete && rm -f /tmp/flag ; somn 1; Terminat'

pare putin murdar dar ar trebui sa mearga...

danidar avatar
drapel fo
da, dar sunt mai interesat să știu de ce systemd îl pornește prea devreme? este din cauza tipului simplu și a faptului că ExecStart este cu /bin/sh -c .... Aș putea adăuga într-adevăr somn și alte hack-uri, pe instalare pot adăuga `&& rm -rf` la ExecStart.

Postează un răspuns

Majoritatea oamenilor nu înțeleg că a pune multe întrebări deblochează învățarea și îmbunătățește legătura interpersonală. În studiile lui Alison, de exemplu, deși oamenii își puteau aminti cu exactitate câte întrebări au fost puse în conversațiile lor, ei nu au intuit legătura dintre întrebări și apreciere. În patru studii, în care participanții au fost implicați în conversații ei înșiși sau au citit transcrieri ale conversațiilor altora, oamenii au avut tendința să nu realizeze că întrebarea ar influența – sau ar fi influențat – nivelul de prietenie dintre conversatori.