Nhầm lẫn về Tiếng /etc/init.d và các dịch vụ trong Tiếng / lib / systemd / hệ thống.


15

Tôi hoàn toàn mới với thế giới linux, vì vậy xin lỗi vì bất cứ điều gì sai tôi có thể nói.

Tôi đang cố chạy Mongo DB trên máy Debian 8.5. Khi tôi cài đặt gói (được xây dựng trước từ percona.com), tôi đã nhận thấy các tệp sau:

/etc/init.d/mongod (1)
/lib/systemd/system/mongod.service (2)

Giới thiệu /etc/init.d/mongod

Tôi hiểu rằng cái này được gọi (miễn là nó được đăng ký qua update-rc.d) khi khởi động / ở các trạng thái hệ thống cụ thể khác (không muốn có kỹ thuật về vấn đề này, tôi đang tiếp thu nhiều thông tin và điều này có vẻ ít quan trọng hơn).

Điều này là hoàn toàn tốt cho tôi. Kịch bản thực hiện rất nhiều khởi tạo và cuối cùng khởi chạy trình nền mongo. Dường như nó đã kích hoạt các ứng dụng khác để khởi động, dừng, khởi động lại, v.v. và theo như tôi hiểu thì tôi có thể kích hoạt những thứ đó với sudo service mongod <action>.

Giới thiệu về /lib/systemd/system/mongod.service

Tệp này dường như làm điều tương tự (ví dụ chạy mongo), nhưng với cấu hình ít hơn, chỉ có một dòng trong tham số ExecStart:

[Unit]
Description=MongoDB (High-performance, schema-free document-oriented database)
After=time-sync.target network.target
[Service]
Type=forking
User=mongod
Group=mongod
PermissionsStartOnly=true
EnvironmentFile=/etc/default/mongod
ExecStart=/usr/bin/env bash -c "/usr/bin/mongod $OPTIONS > ${STDOUT} 2> ${STDERR}"
PIDFile=/var/run/mongod.pid
[Install]
WantedBy=multi-user.target

Theo tôi hiểu điều này có thể được kích hoạt với sudo systemctl start mongod.

  • Tôi không hiểu nếu điều này được gọi lúc khởi động hay không.

  • Tôi không hiểu tại sao cần có hai trong số các tệp 'dịch vụ' này và làm cách nào tôi có thể thoát khỏi một (có thể là tệp trong / lib / systemd, vì nó đơn giản hơn nhiều).

  • Tôi không hiểu nếu có bất kỳ mối quan hệ giữa hai.

  • Tôi cũng đã đọc nó systemctlhoạt động trên init.dcác tập lệnh và trong trường hợp này tôi không hiểu tập tin nào trong hai tập tin sẽ được kích hoạt systemctl mongod start.

Tôi nghĩ rằng có một số dư thừa và tôi nên chọn chỉ một trong hai cách. Và tôi muốn chắc chắn rằng nó là

  • gọi lúc khởi động
  • có thể gọi bằng lệnh (như servicehoặc systemctl).

Bạn có thể giúp tôi giải tỏa tâm trí của tôi? Với sự giúp đỡ của một số ý kiến, tôi có thể tập trung và thu hẹp câu hỏi.

Câu trả lời:


12

Khi bạn có cả init.dtập lệnh và .servicetập tin systemd có cùng tên, systemd sẽ sử dụng tập tin dịch vụ cho tất cả các hoạt động. Tôi tin rằng servicelệnh sẽ chỉ chuyển hướng đến systemd. Kịch bản init.d sẽ bị bỏ qua.

Sử dụng systemd. Nó mới trong Debian 8, nhưng nó là mặc định. Các tệp dịch vụ Systemd được cho là trông đơn giản hơn các tập lệnh init.d. Bạn đã không đề cập đến bất kỳ tính năng cụ thể nào bạn cần mà dịch vụ systemd không hỗ trợ.

Nếu không bao gồm tệp dịch vụ, systemdvui lòng sử dụng tập lệnh init.d. Vì vậy, nhà phát triển gói mongod nói với bạn rằng họ nghĩ định nghĩa systemd này tốt hơn :).

Nhìn vào đầu ra của systemctl status mongod. Nếu dịch vụ được kích hoạt để bắt đầu khi khởi động, Loaded:dòng sẽ hiển thị "đã bật". Nếu không bạn có thể sử dụng systemctl enable mongod. Bạn cũng có thể bao gồm tùy chọn --nowvà nó sẽ bắt đầu mongod cùng một lúc.


Cảm ơn bạn! Tôi sẽ nghiên cứu systemd và cuối cùng sử dụng nó. Hiện tại tôi muốn vô hiệu hóa nó và cuối cùng chạy tập lệnh init.d mà tôi đang làm việc. Tôi đã đi : systemctl disable mongod; sau đó đổi tên mongod.service thành mongod-backup.service; sau đó systemctl daemon-reload. Bạn có nghĩ rằng điều này là chính xác? Tôi đã đọc bạn không nên sửa đổi các tệp trong / lib / systemd / system /, nhưng không đổi tên, systemctl tiếp tục bỏ qua tập lệnh init.d.
natario

Các tập tin trong / lib / systemd không phải là conffiles. Tôi thực sự không thể khuyên bạn nên cài đặt gói debian và sửa đổi các tệp của nó (và sau đó cập nhật gói). Thay vào đó, bạn nên đổi tên tập lệnh init.d mà bạn đã "làm việc" (có lẽ là sửa đổi?). tập lệnh init.d có xu hướng là conffiles. Nếu một bản cập nhật thay đổi một conffile (không nên có bất kỳ lý do nào), nó sẽ cảnh báo bạn trước. Trong trường hợp này, tôi hy vọng nó sẽ thông báo cho bạn nếu một phiên bản cập nhật của tập lệnh init.d gốc (có hiệu quả) đã bị xóa.
sourcejedi

Có thể bạn sẽ cần thêm các phụ thuộc đặt hàng vào dịch vụ mới của mình vào các dịch vụ phụ thuộc vào mongod. Cũng có một cơ hội bạn sẽ phải loại bỏ một số phụ thuộc nghiêm ngặt, nhưng tôi sẽ không nghĩ như vậy. Một cách an toàn để sửa đổi các dịch vụ bị ảnh hưởng là sao chép chúng /etc/systemd/system/và sửa đổi bản sao.
sourcejedi

Nói chung, tôi nghĩ rằng gắn bó với systemd là đơn giản hơn. Bây giờ bạn đang nghiên cứu bash, các hàm init các tính năng tương thích ngược của systemd. Vì bạn không học một hệ thống khởi động SysV thuần túy, nếu bạn đã từng sử dụng một hệ thống như vậy, sẽ có rủi ro bạn sẽ mong đợi các tính năng thực sự đến từ systemd.
sourcejedi
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.