Sự khác biệt giữa mặt nạ Systemctl mặt nạ và hệ thống vô hiệu hóa hệ thống là gì?


35

Tôi muốn cải thiện thời gian khởi động Ubuntu GNOME 16.04 của mình bằng cách vô hiệu hóa các dịch vụ plymouth khi khởi động. Tôi đã tìm thấy hai câu trả lời về cách thực hiện trên các trang web khác nhau:

# systemctl disable plymouth-quit-wait.service 
# systemctl mask plymouth-quit-wait.service 

Tôi không thể thực hiện một trong những điều trên trừ khi tôi biết họ làm gì.


Câu trả lời:


52

Nếu một dịch vụ là enabled, thì có một liên kết tượng trưng ở đâu đó trong

/etc/systemd/system

đến một tập tin đơn vị, thường xuyên nhất ở đâu đó trong

/lib/systemd/system

Thật hữu ích, khi bạn enablelà một dịch vụ, các đường dẫn đầy đủ của liên kết và mục tiêu đã tạo sẽ được in ra thiết bị xuất chuẩn.

Vô hiệu hóa dịch vụ sẽ xóa liên kết tượng trưng, ​​do đó, tệp đơn vị không bị ảnh hưởng, nhưng dịch vụ không được tải ở lần khởi động tiếp theo, khi systemd đọc /etc/systemd/system.

Tuy nhiên, một dịch vụ bị vô hiệu hóa có thể được tải và sẽ được bắt đầu nếu một dịch vụ phụ thuộc vào nó được bắt đầu ; enabledisablechỉ định cấu hình hành vi tự động bắt đầu cho các đơn vị và trạng thái dễ bị ghi đè.

Một dịch vụ đeo mặt nạ là một dịch vụ có tệp đơn vị là một liên kết tượng trưng /dev/null. Điều này làm cho "không thể" tải dịch vụ, ngay cả khi được yêu cầu bởi dịch vụ khác, được kích hoạt.

Khi bạn maskcung cấp dịch vụ, một liên kết tượng trưng được tạo từ /etc/systemd/systemđến /dev/null, để lại tập tin đơn vị gốc ở nơi khác. Khi bạn unmaskmột dịch vụ, symlink sẽ bị xóa.

Tuy nhiên, tôi đã nhận thấy rằng các lệnh này không phải lúc nào cũng được vinh danh.

Khi tôi cố gắng che dấu hầu hết các dịch vụ, nó thất bại:

$ sudo systemctl mask bluetooth.service
Failed to execute operation: Invalid argument

Tất nhiên, tôi đã dừng dịch vụ trước. @Anwar đề xuất mặt nạ chỉ có thể cho các dịch vụ không quan trọng.

Bộc lộ một dịch vụ đeo mặt nạ, trừ khi tôi tự đeo mặt nạ, cũng thất bại (âm thầm). Tôi tin rằng điều này là do không có tệp đơn vị cho dịch vụ ở bất cứ đâu, ngoại trừ ở dạng liên kết tượng trưng /dev/null, lần này là /lib/systemd/system:

$ file $(locate fuse.service)
/lib/systemd/system/fuse.service: symbolic link to /dev/null
$ sudo systemctl unmask fuse.service
$ systemctl status fuse
● fuse.service
   Loaded: masked (/dev/null; bad)
   Active: inactive (dead)

Tôi không phải là người duy nhất gặp vấn đề này

Để thực sự vạch mặt dịch vụ đeo mặt nạ x11-common, tôi đã phải xóa symlink đến /dev/nullsudo apt-get install --reinstall x11-common && sudo systemctl daemon-reload. Bây giờ khi tôi truy vấn nó, systemctl status x11-commontôi thấy dịch vụ có một vòng tròn màu xanh lá cây đẹp và được tải và kích hoạt (thoát) mặc dù nó không có tệp đơn vị.

Để tham khảo thêm bài viết này về Cách sử dụng Systemctl có thể được sử dụng.


1
Hừm, tôi hiểu rồi systemctl status x11-common ● x11-common.service Loaded: masked (/dev/null; bad) Active: inactive (dead). Nó có tệ không? Nhưng tôi đang dùng Debian, không phải Ubuntu. Dù sao, lời giải thích tốt đẹp. Cảm ơn bạn.
Faheem Mitha

@FaheemMitha Tôi không chắc dịch vụ này là cần thiết - hệ thống của tôi dường như hoạt động mà không có nó. Không có kinh nghiệm với Debian, xin lỗi!
Zanna

17

Nó khá đơn giản.

  • systemctl start, systemctl stop: bắt đầu (dừng) thiết bị được đề cập ngay lập tức ;
  • systemctl enable, systemctl disable: đánh dấu (bỏ đánh dấu) đơn vị để tự khởi động khi khởi động (theo cách thức đơn vị cụ thể, được mô tả trong [Install]phần của nó );
  • systemctl mask, systemctl unmask: không cho phép (cho phép) tất cả và mọi nỗ lực để khởi động thiết bị được đề cập (theo cách thủ công hoặc dưới dạng phụ thuộc của bất kỳ đơn vị nào khác, bao gồm cả các phụ thuộc của mục tiêu khởi động mặc định). Lưu ý rằng việc đánh dấu để tự khởi động trong systemd được thực hiện bằng cách thêm một phụ thuộc nhân tạo từ mục tiêu khởi động mặc định vào đơn vị được đề cập, vì vậy "mặt nạ" cũng không cho phép tự khởi động.

Tham chiếu: systemctl (1) .

Thêm: Lennart Poettering (2011/03/02). "Ba cấp độ tắt" . systemd cho Quản trị viên . 0pulum.de.



6

Nói ngắn gọn,

  • disablelàm cho thiết bị bị vô hiệu hóa trong khi khởi động. Nhưng đơn vị đó có thể được bắt đầu bất cứ lúc nào sau khi khởi động.

  • maskvô hiệu hóa đơn vị hoàn toàn. Nó không thể được bắt đầu mà không lột mặt nạ. Điều đó tự động ngụ ý nó sẽ thất bại trong khi khởi động.


Tôi tò mò - làm maskunmasklàm việc cho bạn? (Tôi hoàn toàn hiểu nếu bạn không muốn thử nghiệm!)
Zanna

1
@Zanna vâng. Điều đó không làm việc. Tôi đã thử nghiệm trước đây một lần nữa thử nghiệm ngay bây giờ. với postgresql@9.5-main.servicedịch vụ.
Anwar

Hmm tôi phải tìm ra lý do tại sao nó không làm việc cho tôi. Tôi biết tôi không phải là người duy nhất
Zanna

Có thể nó hoạt động cho các dịch vụ không quan trọng. Tôi nghĩ nó vẫn còn mới. btw, câu trả lời của bạn đã có nhiều thông tin hơn. Nó rất hữu ích
Anwar
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.