Điểm:0

systemd ExecStartPost được thực thi quá nhanh

lá cờ fo

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?

Điểm:0
lá cờ lk

sử dụng như một lá cờ để kiểm tra xem hành động Đăng của bạn có thể được thực thi hay không.

  • nối vào cmd ExecStart:

&& chạm /tmp/cờ

  • thay thế ExecStartPost bằng:

hết thời gian chờ 10 bash -c -- 'trong khi kiểm tra! -f /tmp/cờ; làm /usr/bin/python2 anon_yml.py --delete && rm -f /tmp/flag ; ngủ 1; xong'

nó trông hơi bẩn nhưng sẽ hoạt động ..

danidar avatar
lá cờ fo
vâng nhưng tôi muốn biết tại sao systemd khởi động quá sớm? có phải vì loại đơn giản và thực tế là ExecStart có /bin/sh -c .... Tôi có thể thêm chế độ ngủ thực sự và các bản hack khác, mỗi lần tôi có thể thêm `&& rm -rf` vào ExecStart.

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.