Chúng tôi có một tệp đơn vị:
sử dụng ExecStartPre
mà tạo ra một tập tin cấu hình
ExecStart
sử dụng tệp cấu hình để bắt đầu một dịch vụ
ExecStartPost
sẽ xóa tệp được tạo bởi ExecStartPre
. (tệp có mật khẩu được mã hóa cứng và chúng tôi không muốn giữ nó trên đĩa. Vì vậy, nó chỉ tồn tại trong khi dịch vụ đang được khởi động hoặc khởi động lại.
Nếu dịch vụ được khởi động thành công, nó sẽ xóa tệp cấu hình, nếu dịch vụ không khởi động được, nó cũng sẽ xóa tệp.
đây là tập tin systemd:
[Đơn vị]
Mô tả=Máy chủ Prometheus
Tài liệu=https://prometheus.io/docs/introduction/overview/
Sau=mạng-online.đích
[Dịch vụ]
Người dùng=prommgr
Nhóm=secapm
Khởi động lại = khi thất bại
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
[Cài đặt]
WantedBy=multi-user.target
tệp cấu hình được đề cập là prometheus.yml
kịch bản anon_yml.py
sẽ tạo tệp từ một mẫu jinja và điền vào đó các mật khẩu cần thiết.
ExecStart
sau đó sẽ bắt đầu dịch vụ
trên lý thuyết ExecStartPost
sau đó sẽ xóa tệp prometheus.yml khỏi đĩa sau khi ExecStart kết thúc, tuy nhiên khi dịch vụ được khởi động lại, tôi gặp lỗi thiếu tệp cấu hình. nó chỉ có nghĩa là ExecStartPost không đợi cho đến khi ExecStart kết thúc.
Làm cách nào để đảm bảo tệp cấu hình chỉ bị xóa sau khi quá trình đã được khởi động lại?