Hệ thống thả xuống Systemd không thể tạo tệp PID


11

Tôi có một trình đơn cho hệ thống được gia công tại đường dẫn /etc/systemd/system/systemd-machined.service.d/10-machined-pid-file.conf. Khi tôi chạy systemctl status systemd-machinedtôi thấy các dòng

Drop-In: /etc/systemd/system/systemd-machined.service.d
       └─10-machined-pid-file.conf

Tuy nhiên, tôi không thấy tệp PID trong / var / run /. Dựa trên cơ sở của tôi:

[Serivce]
PIDFile=/var/run/machined.pid

Tôi tin rằng không nên có bất kỳ vấn đề nào khi tạo tệp PID đó. Có cái gì tôi đang thiếu?

Câu trả lời:


18

Các PIDFile=thiết lập không tạo ra một tập tin PID. Điều đó vẫn tùy thuộc vào dịch vụ phải làm, giống như đã được 40 năm qua. Thay vào đó, tùy chọn này cho systemd biết nơi tìm tệp PID hiện có (nếu có). Trong hầu hết các trường hợp, điều đó hoàn toàn không bắt buộc, vì systemd sẽ giữ các dịch vụ trong các nhóm riêng của họ và không cần tệp PID để theo dõi chúng. Tuy nhiên, systemd sẽ xóa một tệp PID khi dịch vụ thoát, nếu dịch vụ không tự dọn sạch.

Từ tài liệu :

Có một tên tệp tuyệt đối trỏ đến tệp PID của daemon này. Nên sử dụng tùy chọn này cho các dịch vụ Type=được đặt thành forking. systemd sẽ đọc PID của quy trình chính của daemon sau khi khởi động dịch vụ. systemd sẽ không ghi vào tệp được cấu hình ở đây, mặc dù nó sẽ xóa tệp sau khi dịch vụ đã tắt nếu nó vẫn tồn tại.


Cảm ơn đã làm rõ. Trong trường hợp của tôi, playframework đã tạo tệp pid trong thư mục gốc của dự án, nhưng việc dừng hoặc tắt tiến trình / dịch vụ này đã không xóa tệp "pid". Vì vậy, tôi không thể khởi động lại dịch vụ dự án của mình vì tập tin "pid". Thêm dòng "PIDFile = / path / to / pid" này vào tệp dịch vụ systemd của tôi hoạt động tốt. Nó đã xóa tập tin pid nếu dịch vụ bị dừng hoặc bị giết
Ikrom

10

Đáng tiếc, systemd sẽ không tạo tệp PID cho dịch vụ không giả mạo ngay cả khi bạn chỉ định một PIDFile=dòng trong tệp đơn vị của dịch vụ. Nhưng bạn có thể gian lận với một ExecStartPost=dòng, chẳng hạn như:

ExecStartPost=/bin/sh -c 'umask 022; pgrep YOURSERVICE > /var/run/YOURSERVICE.pid'
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.