Phụ thuộc Systemd và thứ tự khởi động


20

Tôi cần chỉ định một thứ tự khởi động cho các quá trình để bắt đầu. Tôi có 389 Directory Server và Samba chạy trên Fedora 18. Làm cách nào tôi có thể khởi động dịch vụ mạng, sau đó là 389 DS, sau đó là Samba? Có GUI để quản lý cái này trong Fedora không?

Tôi đã kích hoạt Samba để bắt đầu systemctl enable smb.service. Tôi cũng đã kích hoạt 389 DS với systemctl enable dirsrv.target.


Systemd không yêu cầu trật tự giữa các dịch vụ, ý tưởng là bắt đầu mọi thứ song song và trao các phần kết nối cho các máy chủ khi chúng có sẵn. Cấu hình được cung cấp bởi cài đặt mặc định sẽ ổn. Tại sao bạn nghĩ rằng bạn phải xác định một đơn đặt hàng? Có một cái gì đó không làm việc?
vonbrand

Tôi cũng cần lưu ý, vì điều này đã xuất hiện trở lại, rằng bạn thực sự không nên chạy các dịch vụ tệp / in trên bộ điều khiển miền của mình.
Michael Hampton

@vonbrand Tôi gặp vấn đề này, trong đó máy chủ DHCP của tôi cần slapd (vì cấu hình của nó được lưu trong thư mục LDAP). Nếu không, máy chủ DHCP sẽ không xuất hiện.
chiếu

Câu trả lời:


25

Sử dụng systemctl edit smb.serviceđể cập nhật các phụ thuộc.

After=dirsrv.target - Sẽ đảm bảo smb.service được bắt đầu sau dirsrv.target.

Để mạnh mẽ, (sẽ có giá trị trong khi bạn đang mày mò những thứ này), bạn cũng có thể bao gồm một số điều sau đây:

Requires=dirsrv.target- Kích hoạt dirsrv.target khi smb.service được kích hoạt. Sẽ khiến smb.service không thành công nếu dirsrv.target không thành công.

Wants=dirsrv.target- Kích hoạt dirsrv.target khi smb.service được kích hoạt. Sẽ không khiến smb.service thất bại nếu dirsrv.target không thành công.

BindsTo=dirsrv.target - Nếu dirsrv.target bị hủy kích hoạt, hãy hủy kích hoạt smb.service.

Nguồn: http://www.freedesktop.org/software/systemd/man/systemd.unit.html

systemd-uicung cấp GUI cho systemd. Cung cấp một cái nhìn tốt về trạng thái của systemd nhưng bạn vẫn sẽ phải sử dụng trình soạn thảo văn bản để sửa đổi các tệp đơn vị.


Trong trường hợp A Yêu cầu B , điều gì sẽ nói "B" đã "thất bại" để A sẽ không được bắt đầu? Chương trình của B trả về giá trị khác không?
John Wang

2
Downvote vì điều này khuyên thực hành xấu. Không chỉnh sửa các /usr/lib/systemdphiên bản của tệp đơn vị trừ khi bạn là người bảo trì phân phối hoặc bạn thích các tệp của mình bị ghi đè trên mỗi bản cập nhật gói. Sao chép tệp đơn vị vào /etc/systemdrồi chỉnh sửa hoặc sử dụng tệp thả xuống (xem systemd.unit (5) để biết chi tiết). Thậm chí dễ dàng hơn, chỉ cần sử dụng systemctl edit smb.servicemà thực hiện phép thuật tập tin tự động!
Jeremy Visser

3
Cảm ơn đã chỉnh sửa câu trả lời! Nó giải quyết các mối quan tâm, và tôi đã chuyển đổi thành một upvote. :-)
Jeremy Visser

10

Làm hai việc:

  1. Chỉnh sửa /lib/systemd/system/smb.servicetập tin đơn vị, để chỉ định phụ thuộc. Phần [unit]này chứa một After=dòng chỉ định những dịch vụ / mục tiêu nào cần đạt được trước mục này.

    After=syslog.target network.target nmb.service winbind.service
    

    Thay đổi nó thành:

    After=dirsrv.target syslog.target network.target nmb.service winbind.service
    
  2. Báo cáo sự phụ thuộc này lại cho Fedora như một lỗi , để nó có thể được kết hợp trong các bản phát hành trong tương lai.


Điều đó dường như không hoạt động. Samba vẫn khởi động trước 389.
Dylan Klomparens

3
sau khi bạn sửa đổi unitcác tệp, bạn thường nên chạysystemctl daemon-reload
scottyseus

2

bạn có thể cần phải thay đổi hoặc bao gồm một dòng với Requireschỉ thị trong [Unit] phần của /usr/lib/systemd/system/smb.servicetệp.

Requires=dirsrv.target

After=dirsrv.target

Chà, tôi đã bình chọn cho câu trả lời này, tuy nhiên, cá nhân tôi đi với Wants = dirsrv.target thay vì Request =. (xem systemd.unit (5) cho Wants =)
galaxy

2

Có hai lựa chọn thay thế để sửa đổi tệp dịch vụ trong /usr/lib/systemd/system(xem Ví dụ 2. Ghi đè cài đặt nhà cung cấp ):

  1. Sao chép tệp vào /etc/systemd/systemvà thực hiện các sửa đổi trên bản sao. Tập tin này sẽ ghi đè hoàn toàn tập tin vào /usr/lib.

  2. Tạo tập tin /etc/systemd/system/smb.service.d/local.conf. Nội dung của tệp nên giống như ví dụ dưới đây. Điều này có chọn lọc ghi đè các tùy chọn "Yêu cầu" và "Sau" trong tệp dịch vụ do nhà cung cấp cung cấp.

Mỗi trong số này (bao gồm sửa đổi tệp trong /usr/lib) cung cấp các ưu điểm và nhược điểm. Sự lựa chọn tốt nhất có thể phụ thuộc vào dịch vụ và bản chất của các sửa đổi.

Mặc dù nó có thể hoạt động, nhưng chỉ thêm tùy chọn "Sau" (xem phần [Đơn vị] Mục ) là không đủ . "Sau" kiểm soát thứ tự, nhưng không phụ thuộc. Nếu dirsrv.targetkhông được bắt đầu theo một cách khác, việc chỉ định một đơn đặt hàng sẽ không bắt đầu nó. Việc sử dụng tùy chọn "Yêu cầu" hoặc "Muốn" sẽ buộc dirsrv.targetphải được bắt đầu.

[Unit]
Requires=dirsrv.target
After=dirsrv.target

Lưu ý: Tôi không biết cách tiếp cận này có sẵn khi câu hỏi này ban đầu được hỏi không.

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.