Tạo một thư mục dưới / var / run khi khởi động


39

Tôi đã có một trình nền cần có thư mục riêng /var/runcho tệp PID của nó với quyền ghi được cấp cho người dùng của trình nền.

Tôi thấy tôi có thể tạo thư mục này với các lệnh sau:

# mkdir /var/run/mydaemon

Sau đó, tôi có thể thay đổi quyền sở hữu của mình thành người dùng / nhóm mà theo đó tôi muốn chạy quy trình:

# chown myuser:myuser /var/run/mydaemon

Nhưng thư mục này sẽ được thực hiện bất cứ khi nào tôi phát hành khởi động lại! Làm cách nào để có được thư mục này để tạo mỗi khi máy khởi động?

Câu trả lời:


56

Hai lựa chọn thay thế để có các thư mục tạo systemd, thường dễ nhất là khai báo a RuntimeDirectorytrong tệp đơn vị dịch vụ của bạn:

RuntimeDirectory=, RuntimeDirectoryMode= Có một danh sách các tên thư mục. Nếu được đặt, một hoặc nhiều thư mục theo tên được chỉ định sẽ được tạo bên dưới /run(đối với dịch vụ hệ thống) hoặc dưới $ XDG_RUNTIME_DIR (đối với dịch vụ người dùng) khi thiết bị được khởi động và xóa khi thiết bị bị dừng. Các thư mục sẽ có chế độ truy cập được chỉ định trong RuntimeDirectoryMode=và sẽ được sở hữu bởi người dùng và nhóm được chỉ định trong User=Group=. Sử dụng điều này để quản lý một hoặc nhiều thư mục thời gian chạy của đơn vị và liên kết trọn đời của chúng với thời gian chạy daemon. Tên thư mục được chỉ định phải tương đối và có thể không bao gồm "/", tức là phải tham khảo các thư mục đơn giản để tạo hoặc xóa. Điều này đặc biệt hữu ích cho các trình tiện ích không có đặc quyền không thể tạo thư mục thời gian chạy trong / chạy do thiếu đặc quyền và để đảm bảo thư mục thời gian chạy được dọn sạch tự động sau khi sử dụng.

Hoặc đối với các thư mục thời gian chạy yêu cầu cấu hình phức tạp hơn hoặc khác nhau hoặc đảm bảo trọn đời, hãy sử dụng tmpfiles.dvà yêu cầu gói của bạn thả một tệp /usr/lib/tmpfiles.d/mydaemon.conf:

 #Type Path            Mode UID      GID    Age Argument
 d     /run/mydaemon   0755 myuser myuser   -   -

Tôi đã sử dụng cái thứ hai bởi vì daemon thực tế sử dụng systemd-sysv-generatorvà tôi đã có đủ các đường cong học tập trong tuần. Chỉ cần một tập tin .conf và một dòng. Cảm thấy tốt ngay bây giờ B-)
user24601

Tôi đã có sau này được định nghĩa trong tôi /usr/lib/tmpfiles.d/php7.3-fpm.conf/usr/lib/tmpfiles.d/php7.2-fpm.confvà nó vẫn không tạo ra các /run/phpthư mục.
MarthyM

3

Tôi đã tạo một dịch vụ sẽ thực hiện thư mục khi bắt đầu:

vim /etc/systemd/system/mydaemon-helper.service

Nội dung của /etc/systemd/system/mydaemon-helper.service:

[Unit]
Description=MyDaemon Helper Simple Service
After=network.target

[Service]
Type=simple
ExecStartPre=-/usr/bin/mkdir /var/run/mydaemon
ExecStart=/usr/bin/chown myuser:myuser /var/run/mydaemon
Restart=on-abort


[Install]
WantedBy=multi-user.target

Sau đó, tôi bắt đầu dịch vụ này:

systemctl start mydaemon-helper

systemctl status mydaemon-helper

Đầu ra:

[root@alpha etc]# systemctl status mydaemon-helper.service
● mydaemon-helper.service - MyDaemon Helper Simple Service
   Loaded: loaded (/etc/systemd/system/mydaemon-helper.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

May 28 20:53:50 alpha systemd[1]: Starting MyDaemon Helper Simple Service...
May 28 20:53:50 alpha systemd[1]: Started MyDaemon Helper Simple Service.

Cuối cùng tôi đã nói với hệ thống để tải nó khi khởi động:

systemctl enable mydaemon-helper


Ok, tôi đoán tôi nên đặt câu hỏi này trong câu hỏi của tôi vì tôi là một người như vậy. Tôi đang học mặc dù - cảm ơn các bạn!
user24601

2
Không, tạo ra một câu trả lời là điều nên làm, vì vậy mọi người có thể nhận xét về nó và vì vậy nó không làm lộn xộn câu hỏi của bạn. Trả lời câu hỏi của riêng bạn được khuyến khích rõ ràng trên SO. Và câu trả lời của bạn cũng không sai, chỉ là có nhiều cách tốt hơn để làm điều này, vì vậy IMO bạn không nên bị từ chối. Nó cũng không nên được nâng cấp. :)
Bryan Larsen

2
Mặc dù bây giờRuntimeDirectory là cách tốt hơn để thực hiện việc này , tôi đã chạy vào một máy chủ có phiên bản systemd (208) cũ mà lệnh đó không tồn tại, vì vậy câu trả lời này là cách giải quyết duy nhất.
Davor Cubranic

Đây dường như vẫn là cách để làm điều đó nếu bạn cần một thư mục được tạo và sở hữu bởi một người dùng khác với người dùng dịch vụ hoặc để thư mục tồn tại cho đến khi khởi động lại hoặc để thư mục được chia sẻ giữa nhiều dịch vụ.
Perkins
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.