Nơi tốt nhất để đặt các tệp đơn vị hệ thống : /etc/systemd/system
Chỉ cần đảm bảo thêm mục tiêu trong phần [Cài đặt], đọc "Làm sao nó biết?" để biết chi tiết. CẬP NHẬT : /usr/local/lib/systemd/system
là một tùy chọn khác, đọc "Vùng xám" để biết chi tiết. "
Nơi tốt nhất để đặt các tệp đơn vị người dùng : /etc/systemd/user
hoặc $HOME/.config/systemd/user
nhưng nó phụ thuộc vào quyền và tình huống.
Sự thật là các đơn vị systemd (hoặc như câu giới thiệu gọi chúng là "cấu hình đơn vị") có thể đi bất cứ nơi nào mà bạn đã sẵn sàng tạo ra các liên kết thủ công và bạn biết về sự cẩn thận. Nó làm cho cuộc sống dễ dàng hơn để đặt đơn vị nơi systemctl daemon-reload
có thể tìm thấy nó vì một số lý do tốt:
- Sử dụng một vị trí tiêu chuẩn có nghĩa là các trình tạo systemd sẽ tìm thấy chúng và giúp chúng dễ dàng kích hoạt khi khởi động cùng
systemctl enable
. Điều này là do đơn vị của bạn sẽ tự động được thêm vào cây phụ thuộc đơn vị (bộ đệm đơn vị).
- Bạn không cần phải suy nghĩ về các quyền, bởi vì chỉ những người dùng đặc quyền đúng mới có thể viết thư cho các khu vực được chỉ định.
Làm sao nó biết?
Và làm thế nào chính xác systemctl enable
biết nơi để tạo ra các liên kết tượng trưng? Bạn mã cứng nó trong đơn vị dưới [install]
phần. Thông thường có một dòng như
[Install]
WantedBy = multi-user.target
tương ứng với một vị trí được xác định trước trên hệ thống tập tin. Bằng cách này, systemctl
biết rằng đơn vị này phụ thuộc vào một nhóm các tệp đơn vị được gọi là multi-user.target
("đích" là thuật ngữ được sử dụng để chỉ định các nhóm phụ thuộc đơn vị. Bạn có thể liệt kê tất cả các nhóm với systemctl list-units --type target
). Nhóm các tập tin đơn vị được tải với một mục tiêu được đặt trong một targetname.target.wants
thư mục. Đây chỉ là một thư mục đầy đủ các liên kết tượng trưng (hoặc thực tế). Nếu bạn [Install]
phần nói nó là WantedBy
sự multi-user.target
, nhưng nếu một liên kết tượng trưng để nó không tồn tại trong multi-user.target.wants
thư mục, sau đó nó sẽ không tải. Khi trình tạo đơn vị systemd thêm tệp đơn vị của bạn vào bộ đệm của cây phụ thuộc khi khởi động (bạn có thể tự kích hoạt trình tạo systemctl daemon-reload
), nó sẽ tự động biết nơi đặt symlink trong trường hợp này trong thư mục/etc/systemd/system/multi-user.target.wants/
bạn nên kích hoạt nó
Các điểm chính trong Hướng dẫn:
Các đơn vị bổ sung có thể được tải vào systemd ("được liên kết") từ các thư mục không nằm trên đường dẫn tải đơn vị. Xem lệnh liên kết cho systemctl (1).
Trong systemctl, tìm kiếm các lệnh tập tin đơn vị
Đường dẫn tải tệp đơn vị
Các tệp đơn vị được tải từ một tập hợp các đường dẫn được xác định trong quá trình biên dịch, được mô tả trong hai bảng bên dưới. Các tệp đơn vị được tìm thấy trong các thư mục được liệt kê trước đó ghi đè các tệp có cùng tên trong các thư mục thấp hơn trong danh sách.
Khi biến $SYSTEMD_UNIT_PATH
được đặt, nội dung của biến này sẽ ghi đè đường dẫn tải đơn vị. Nếu $SYSTEMD_UNIT_PATH
kết thúc bằng một thành phần trống (":"), đường dẫn tải đơn vị thông thường sẽ được thêm vào nội dung của biến.
Bảng 1 và Bảng 2 từ man systemd.unit
đều tốt.
Tải đường dẫn khi chạy ở chế độ hệ thống ( --system
).
/etc/systemd/system
Cấu hình cục bộ
/run/systemd/system
Đơn vị thời gian chạy
/usr/lib/systemd/system
Đơn vị gói cài đặt
Tải đường dẫn khi chạy ở chế độ người dùng ( --user
)
Có sự khác biệt giữa mỗi đơn vị người dùng và tất cả / đơn vị người dùng toàn cầu .
Người dùng phụ thuộc
$XDG_CONFIG_HOME/systemd/user
Cấu hình người dùng (chỉ được sử dụng khi $XDG_CONFIG_HOME
được đặt)
$HOME/.config/systemd/user
Cấu hình người dùng (chỉ được sử dụng khi $XDG_CONFIG_HOME
không được đặt)
$XDG_RUNTIME_DIR/systemd/user
Đơn vị thời gian chạy (chỉ được sử dụng khi $XDG_RUNTIME_DIR
được đặt)
$XDG_DATA_HOME/systemd/user
Đơn vị các gói đã được cài đặt trong thư mục chính (chỉ được sử dụng khi $XDG_DATA_HOME
được đặt)
$HOME/.local/share/systemd/user
Đơn vị các gói đã được cài đặt trong thư mục chính (chỉ được sử dụng khi $XDG_DATA_HOME
không được đặt)
--global
(tất cả người dùng)
Các đơn vị áp dụng cho tất cả người dùng - cũng có nghĩa là sở hữu của mỗi người dùng. Vì vậy, mỗi người dùng có thể dừng các dịch vụ này ngay cả khi quản trị viên kích hoạt chúng khi khởi động.
/etc/systemd/user
Cấu hình cục bộ cho tất cả người dùng ( systemctl --global enable userunit.service
)
/usr/lib/systemd/user
Đơn vị gói đã được cài đặt trên toàn hệ thống cho tất cả người dùng
/run/systemd/user
Đơn vị thời gian chạy
Khu vực màu xám
Một mặt, Tiêu chuẩn phân cấp tệp xác định rằng /etc
dành cho các cấu hình cục bộ không thực thi nhị phân. Mặt khác, nó chỉ định rằng /usr/local/
"được quản trị viên hệ thống sử dụng khi cài đặt phần mềm cục bộ". Bạn cũng có thể lập luận (nếu không chỉ vì mục đích tổ chức) rằng tất cả các tệp đơn vị hệ thống nên được thực hiện /usr/local/lib/systemd/system
, nhưng điều này dành cho các tệp đơn vị là một phần của "phần mềm" không phải từ trình quản lý gói. Các đơn vị người dùng systemd tương ứng trên toàn hệ thống có thể đi theo
/usr/local/lib/systemd/user
.
/etc/systemd/system
là nơi bạn đặt tập lệnh của mình, pacman đặt tập lệnh gói vào/usr/lib/systemd/system
và phát hànhsystemctl enable foo.service
tạo liên kết tượng trưng từ/usr
đến/etc
...