Kích hoạt tệp đơn vị 'được liên kết' trong Systemd


10

Tôi vẫn đang nắm bắt được với systemd và đã gặp phải điều gì đó. Đó không phải là một vấn đề quá lớn, nhưng tôi muốn tìm hiểu thêm về cách thức này. Tôi không thể tìm thấy bất kỳ tài liệu tham khảo nào ở nơi này.

Trước hết, tôi hiểu rằng các tệp đơn vị tùy chỉnh cho các dịch vụ nên đi vào /etc/systemd/system. Tuy nhiên, sẽ rất tốt cho việc quản lý các máy chủ của chúng tôi nếu các tệp đơn vị có thể được đặt ở nơi khác.

Trong tài liệu, tôi thấy rằng bạn có thể 'liên kết' các tệp đơn vị như vậy:

systemctl link /path/to/servicename.service

Điều này sẽ tạo ra một liên kết đến ở trên /etc/systemd/system. Bây giờ bạn có thể bắt đầu / dừng dịch vụ này. Nhìn bề ngoài, đây có vẻ là một cách tốt để chúng tôi quản lý các dịch vụ của mình.

Tuy nhiên, cố gắng kích hoạt tệp đơn vị 'được liên kết' như vậy sẽ không thành công:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Sử dụng cùng một tệp đơn vị, nhưng được sao chép vào /etc/systemd/systemthay vì được liên kết trong, bạn nhận được:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

Từ đó, dường như không thể cho phép liên kết trong các tệp đơn vị được gọi khi khởi động hệ thống.

Nếu đây là trường hợp, điểm của chức năng 'liên kết' là gì? Từ các tài liệu, nó nói:

liên kết PHIM

Liên kết một tệp đơn vị không có trong đường dẫn tìm kiếm tệp đơn vị vào đường dẫn tìm kiếm tệp đơn vị. Điều này đòi hỏi một đường dẫn tuyệt đối đến một tập tin đơn vị. Hiệu ứng này có thể được hoàn tác với vô hiệu hóa. Tác dụng của lệnh này là một tệp đơn vị có sẵn để bắt đầu và các lệnh khác mặc dù nó không được cài đặt trực tiếp trong đường dẫn tìm kiếm đơn vị.

Câu trả lời:


13

Các trang người đàn ông là sai lệch.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

Việc đầu tiên làm cho bạn có thể làm systemctl start myservice. Thứ hai làm cho nó có thể myserviceđược bắt đầu tự động (mà, như @Julien đã chỉ ra, tự động thêm link).

Tôi nghĩ rằng ... Tôi đã cố gắng quấn đầu mình suốt ngày này.


1
lưu ý rằng điều đó systemctl enablecũng sẽ làm systemctl link, vì vậy không cần phải gõ 2 lệnh ;-)
Julien

@Julien ơi, chúng tôi là bạn khi tôi viết bài này vào năm ngoái :-) Tôi nghĩ rằng cuối cùng tôi đã nhận ra rằng tháng trước!
Auspex

9

Khi kích hoạt một dịch vụ từ một đường dẫn khác ngoài các đường dẫn mặc định, bạn nên sử dụng đường dẫn đầy đủ. Bật cũng sẽ tạo liên kết cho bạn:

systemctl enable /root/myservice.service

Sau khi kích hoạt, bạn có thể bắt đầu / dừng / trạng thái với tên dịch vụ

systemctl start myservice

Một vài cảnh báo ở đây:

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.