Tôi có thể sử dụng một liên kết tượng trưng như một dịch vụ của systemd không?


14

Ví dụ, tôi có một dịch vụ có tên mysshd.servicetrong /usr/lib/systemd/system/thư mục. Tôi có thể tạo một liên kết tượng trưng như:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

để bất kỳ thao tác nào tôi thực hiện với crazy.service sẽ được phản ánh tới mysshd.service( systemctl enable/disable start/stop fool.servce)?

Mục đích của tôi là ghi đè lên dịch vụ sshd riêng bằng một liên kết tượng trưng của dịch vụ sshd của riêng tôi.


1
Tại sao không thêm và kích hoạt dịch vụ của bạn và vô hiệu hóa dịch vụ sshd gốc?
Lambert

Tôi muốn phần mềm của tôi tương thích với phiên bản trước đã sử dụng liên kết tượng trưng /etc/init.d/ssh -> /etc/init.d/myssh.
nick

Tôi vẫn không hiểu chính xác ý của bạn là gì nhưng theo dòng của bạn <quote> để bất kỳ thao tác nào tôi thực hiện với crazy.service sẽ được phản ánh tới mysshd.service (systemctl enable / vô hiệu hóa start / stop crazy.servce)? </ Quote > bạn có thể xem xét các phụ thuộc systemd (xem wiki.archlinux.org/index.php/systemd#Handling_dependencies ) để bắt đầu / bật dịch vụ của bạn sau sshd.
Lambert

@nick chào mừng bạn đến với Stack Exchange! trên Stack Exchange, thông thường sẽ hiển thị danh tiếng cho câu trả lời bằng cách nâng cấp. bạn có thể làm điều này bằng cách nhấp vào mũi tên lên ở bên trái của câu trả lời. nếu câu trả lời của tôi giải quyết được vấn đề của bạn, bạn cũng có thể xem xét nhấp vào hộp kiểm, để đánh dấu nó là được chấp nhận. cảm ơn!
strugee

Câu trả lời:


9

Theo như tôi biết, systemd sẽ không giải quyết vấn đề này đặc biệt tốt. Theo tôi hiểu, bạn muốn ghi đè hành vi của sshd.service, phải không?

May mắn cho bạn, systemd được thiết kế cho loại điều này. Chỉ cần đặt định nghĩa dịch vụ của bạn vào /etc/systemd/system/ssh.service, thực thi systemctl daemon-reloadđể tải lại các tệp đơn vị và systemd sẽ tự động sử dụng cấu hình đó thay vì hệ thống ssh.service.

Bạn cũng muốn có systemctl enable mysshd.servicecông việc? Không vấn đề gì. Trong [Install]phần của tệp đơn vị của bạn, thêm một dòng có nội dung Alias=mysshd.service. Sau đó thực hiện systemctl reenable ssh.serviceđể có systemd sửa các liên kết đơn vị, và bạn là vàng.

Bây giờ, bạn chưa đưa ra chi tiết về những gì mysshd.servicecần phải làm. Nếu nó hoàn toàn khác với bình thường ssh.service, thật tuyệt! Sử dụng phương pháp trên. Tuy nhiên, nếu bạn chỉ muốn thay đổi một điều nhỏ, thì bạn đang sử dụng sai phương pháp. systemd cho phép bạn tạo "đoạn trích" của các tệp đơn vị sẽ được áp dụng trên đầu các tệp đơn vị bình thường. Điều này cho phép bạn thêm hoặc ghi đè các chỉ thị riêng lẻ trong khi cho phép phần còn lại của tệp đơn vị nhận được cập nhật từ trình quản lý gói. Để làm điều này, chỉ cần tạo /etc/systemd/system/ssh.d/my-custom-config.conf(bạn có thể thay đổi my-custom-config.confthành bất cứ điều gì bạn muốn và bạn cũng có thể có nhiều tệp ghi đè). Trong tệp đó, đặt bất kỳ chỉ thị nào bạn muốn thay đổi hoặc thêm vào thông thường ssh.service. Bạn thậm chí có thể thêm Alias=chỉ thị, để systemctl start mysshd.servicelàm việc! Chỉ cần nhớ để thực hiệnsystemctl daemon-reloadsau khi bạn hoàn thành (và, nếu bạn đã sử dụng Alias=, systemctl reenable ssh.service).

Là một sang một bên, không bao giờ, bao giờ thay đổi file đơn vị systemd trong /usr/lib/systemd. Không bao giờ! Các hệ thống tập tin tiêu chuẩn cấp bậc đòi hỏi/usrđược coi là chỉ đọc. Trong thực tế, điều này có nghĩa là trình quản lý gói xử lý /usr(ngoại trừ /usr/local) và bạn không chạm vào những gì trình quản lý gói xử lý - đặc biệt là vì bất cứ điều gì bạn thay đổi có thể sẽ bị ghi đè. Thay vào đó, hãy đặt công cụ của bạn vào một nơi nào đó như thế nào /etc.


1
Để làm rõ điều đó một chút: nếu bạn muốn ghi đè foo.service, hãy chạy sudo systemctl edit foo.servicevà nó sẽ lưu bất cứ thứ gì bạn nhập vào /etc/systemd/system/foo.service.d/override.conf.
Rockallite

Ngoài ra, Alias=chỉ thị KHÔNG hoạt động trong các tập tin ghi đè. Xem github.com/systemd/systemd/issues/1090
Rockallite

@Rockallite không biết về systemctl editthời điểm tôi viết câu trả lời này. vui lòng chỉnh sửa câu trả lời của tôi để phản ánh Alias=lỗi (đặt "OK với người trả lời" hoặc một cái gì đó trong thông báo chỉnh sửa). nắm bắt tốt.
strugee

5

Sử dụng linkvới đường dẫn đầy đủ:

systemctl link /home/nick/myservice.service

Lưu ý rằng bạn không thể liên kết một tệp dịch vụ mà bản thân nó đã là một liên kết.


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.