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/systemlà 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-reloadcó 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 enablebiế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, systemctlbiế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.wantsthư 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à WantedBysự 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.wantsthư 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_PATHkế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_HOMEkhô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_HOMEkhô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 /etcdà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/systemlà 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/systemvà phát hànhsystemctl enable foo.servicetạo liên kết tượng trưng từ/usrđến/etc...