Score:0

systemd ExecStartPost ทำงานเร็วเกินไป

ธง fo

เรามีไฟล์หน่วยซึ่ง:

ใช้ ExecStartPre ซึ่งสร้างไฟล์ปรับแต่ง ExecStart ใช้ไฟล์ปรับแต่งเพื่อเริ่มบริการ ExecStartPost ซึ่งจะลบไฟล์ที่สร้างโดย ExecStartPre. (ไฟล์มีรหัสผ่านแบบตายตัวและเราไม่ต้องการเก็บไว้ในดิสก์ ดังนั้นจึงต้องมีอยู่ในขณะที่บริการกำลังเริ่มหรือรีสตาร์ทเท่านั้น

หากเริ่มบริการได้สำเร็จ ควรลบไฟล์กำหนดค่า หากไม่สามารถเริ่มบริการได้ ควรลบไฟล์ด้วย

นี่คือไฟล์ systemd:

[หน่วย]
คำอธิบาย=เซิร์ฟเวอร์ Prometheus
เอกสาร=https://prometheus.io/docs/introduction/overview/
After=network-online.target

[บริการ]
ผู้ใช้=prommgr
Group=secapm
รีสตาร์ท = เมื่อล้มเหลว
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 

[ติดตั้ง]
WantedBy=multi-user.target

ไฟล์กำหนดค่าที่เป็นปัญหาคือ prometheus.yml สคริปต์ anon_yml.py จะสร้างไฟล์จากเทมเพลต jinja และเติมด้วยรหัสผ่านที่จำเป็น ExecStart จากนั้นจะเริ่มให้บริการ

ในทางทฤษฎี ExecStartPost จากนั้นจะลบไฟล์ prometheus.yml ออกจากดิสก์หลังจาก ExecStart เสร็จสิ้น อย่างไรก็ตาม เมื่อบริการกำลังเริ่มใหม่ ฉันมีข้อผิดพลาดของไฟล์กำหนดค่าหายไป หมายความว่า ExecStartPost ไม่ได้รอจนกว่า ExecStart จะเสร็จสิ้น

จะแน่ใจได้อย่างไรว่าไฟล์กำหนดค่าถูกลบหลังจากเริ่มกระบวนการใหม่แล้วเท่านั้น

Score:0
ธง lk

ใช้เหมือนตั้งค่าสถานะเพื่อตรวจสอบว่าการดำเนินการโพสต์ของคุณสามารถดำเนินการได้หรือไม่

  • ผนวกเข้ากับ ExecStart cmd:

&& แตะ /tmp/flag

  • แทนที่ ExecStartPost ด้วย:

หมดเวลา 10 bash -c -- 'ขณะทดสอบ ! -f /tmp/ธง; ทำ /usr/bin/python2 anon_yml.py --delete && rm -f /tmp/flag ; นอน 1; เสร็จแล้ว'

มันดูสกปรกไปหน่อย แต่น่าจะใช้ได้..

danidar avatar
fo flag
ใช่ แต่ฉันสนใจที่จะรู้ว่าทำไม systemd เริ่มเร็วเกินไป เป็นเพราะประเภทที่เรียบง่ายและความจริงที่ว่า ExecStart อยู่กับ /bin/sh -c .... ฉันสามารถเพิ่มโหมดสลีปและการแฮ็กอื่นๆ ต่อการติดตั้ง ฉันสามารถผนวก `&& rm -rf` เข้ากับ ExecStart

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา