Làm thế nào để các dịch vụ trong Debian hoạt động và làm cách nào tôi có thể quản lý chúng?


79

Trong Windows tôi có trình quản lý dịch vụ, nơi tôi thấy tất cả các dịch vụ hệ thống, có thể được khởi động thông qua chính Windows, tôi thiết lập người dùng mà nó sử dụng, quản lý quyền ở đó và tôi có thể chuyển các biến và một số thông tin khác cho các dịch vụ , Tôi có thể đặt tên cho chúng và tôi có thể tạo các dịch vụ trùng lặp của một chương trình, v.v. Vì vậy, tôi có một công cụ quản lý chính trong Windows.

Làm thế nào tôi có thể làm điều tương tự trong Linux? Làm cách nào tôi có thể kích hoạt để chạy "svnserve" khi khởi động hoặc làm cách nào tôi có thể định cấu hình các dịch vụ đang chạy trong ngữ cảnh đặc biệt. Làm cách nào tôi có thể xem tất cả các dịch vụ "được lập trình"?


9
Phân phối và phiên bản nào bạn đang sử dụng? Quản lý dịch vụ (các dịch vụ hầu như luôn được gọi là 'daemon' trong thế giới Unix) được sử dụng để dễ dàng và bán chuẩn. Mọi thứ ngày càng đa dạng. Và không phải lúc nào cũng tốt đẹp. :) Ngoài ra, bạn có ý nghĩa gì bởi bối cảnh ?
Alexios

Mặc dù có vẻ như systemd đang dần chiến thắng trong cuộc chiến hệ thống init. Debian là công cụ lớn cuối cùng vẫn sử dụng SysVinit cũ và hiện đang trong quá trình xác định hệ thống init nào sẽ đi cùng.
Patrick

1
Hiện tại tôi làm việc với Debian (ổn định mới nhất) và theo ngữ cảnh tôi có nghĩa là các biến đường dẫn hoặc bối cảnh người dùng được chỉ định.
Erdinc Ay

1
Nếu bạn chỉ cần sử dụng serverlệnh tại Debian, hãy xem unix.stackexchange.com/q/226089/130402
Peter Krauss

Câu trả lời:


124

Hiện tại có 3 hệ thống init chính được sử dụng bởi linux. Vài năm trước, chỉ có một, SysVinit. Nhưng SysVinit đã thiếu nghiêm trọng các khả năng như vẽ biểu đồ phụ thuộc dịch vụ, do đó, hiện tại nó đã bị phản đối ở hầu hết các bản phát hành. Hiện tại hầu hết các distro đang chuyển sang systemd . Mặc dù có cũng là mới nổi .

Nhưng đây là câu trả lời cho câu hỏi của bạn cho mỗi trong số 3 hệ thống init:

 

SysVinit

SysVinit hiện đang được Debian và RedHat sử dụng. Mặc dù phiên bản tiếp theo của RedHat (7) sẽ sử dụng systemd.

Cách phổ biến để kích hoạt các dịch vụ SysVinit khi khởi động là liên kết chúng trong /etc/rc3.d(hoặc /etc/rc2.d). Tất cả các dịch vụ có thể được tìm thấy trong /etc/init.d. Tuy nhiên, xin lưu ý rằng các bản phân phối thường sẽ có công cụ riêng để quản lý các tệp này và công cụ đó nên được sử dụng thay thế. (Fedora / RedHat có servicechkconfig, ubfox có update-rc.d)

Liệt kê các dịch vụ:

ls /etc/init.d/

Bắt đầu dịch vụ:

/etc/init.d/{SERVICENAME} start

hoặc là

service {SERVICENAME} start

Dừng phục vụ:

/etc/init.d/{SERVICENAME} stop

hoặc là

service {SERVICENAME} stop

Cho phép dịch vụ:

cd /etc/rc3.d
ln -s ../init.d/{SERVICENAME} S95{SERVICENAME}

( S95được sử dụng để chỉ định thứ tự. S01 sẽ bắt đầu trước S02, v.v.)

Vô hiệu hóa dịch vụ:

rm /etc/rc3.d/*{SERVICENAME}

 

Hệ thống

Phân phối đáng chú ý nhất sử dụng systemd là Fedora. Mặc dù nó được sử dụng bởi nhiều người khác. Ngoài ra, với Debian đã chọn hệ thống khởi động hệ thống, nó sẽ trở thành hệ thống khởi động chính xác cho hầu hết các bản phân phối (ubfox đã thông báo rằng họ sẽ bỏ qua cho systemd).

Liệt kê các dịch vụ:

systemctl list-unit-files

Bắt đầu dịch vụ:

systemctl start {SERVICENAME}

Dừng phục vụ:

systemctl stop {SERVICENAME}

Cho phép dịch vụ:

systemctl enable {SERVICENAME}

Vô hiệu hóa dịch vụ:

systemctl disable {SERVICENAME}

 

Mới bắt đầu

Upstart được phát triển bởi những người Ubuntu. Nhưng sau khi debian quyết định đồng hành cùng systemd , Ubuntu tuyên bố họ sẽ bỏ cuộc .

Upstart cũng được RedHat sử dụng một thời gian ngắn, vì nó có mặt trong RHEL-6, nhưng nó không được sử dụng phổ biến.

Liệt kê các dịch vụ:

initctl list

Bắt đầu dịch vụ:

initctl start {SERVICENAME}

Dừng phục vụ:

initctl stop {SERVICENAME}

Cho phép dịch vụ:

Thật không may là 2 cách:

  1. Sẽ có một tập tin /etc/default/{SERVICENAME}chứa một dòng ENABLED=.... Thay đổi dòng này thành ENABLED=1.

  2. Sẽ có một tập tin /etc/init/{SERVICENAME}.override. Hãy chắc chắn rằng nó chứa start(hoặc vắng mặt hoàn toàn), không manual.

Vô hiệu hóa dịch vụ:

echo manual > /etc/init/{SERVICENAME}.override

Lưu ý: Ngoài ra còn có hệ thống init 'OpenRC' được Gentoo sử dụng. Hiện tại Gentoo là bản phân phối duy nhất sử dụng nó và nó không được xem xét để sử dụng, cũng không được hỗ trợ bởi bất kỳ bản phân phối nào khác. Vì vậy, tôi không bao gồm việc sử dụng nó (mặc dù nếu ý kiến ​​là tôi làm, tôi có thể thêm nó).


OpenRC là một loại trừu tượng cho SysVinit. Nó không thay thế nó, nó thêm vào nó.
Spidey

Tuyệt vời viết! Chỉ cần một vài sửa đổi nhỏ: RHEL 6.x (và do đó, CentOS 6.x và phần còn lại của các công cụ phái sinh) sử dụng mới nhất, như Ubuntu (mặc dù hầu hết các dịch vụ vẫn sử dụng tập lệnh SysV). Ngoài ra, tôi muốn thêm rằng "chkconfig" (RH) và "update-rc.d" (Debian) là những cách "chính thức" để thêm liên kết vào các thư mục RC? .D.
rsuarez

@rsuarez điểm tốt về điều RHEL6. Mặc dù dường như không sử dụng nhiều. Hầu hết hệ thống vẫn chạy thông qua SysVinit cũ (17 mới nổi, 89 SysVinit trên một trong các hệ thống RHEL6 của tôi). Và chkconfigupdate-rc.dđược đề cập. Xem đoạn thứ hai dưới SysVinit :-)
Patrick

@Patrick đồng ý về # 1; "Úi!" vào ngày 2 :-)
rsuarez

1
Cảm ơn câu trả lời toàn diện, giờ tôi đã có bức tranh lớn. Hiện tại tôi đang sử dụng Debian (ổn định mới nhất), ở đây tại châu Âu nói tiếng Đức, nó có các đề xuất tốt nhất, nhưng có lẽ tôi sẽ thử Redhat.
Erdinc Ay

9

Phân phối khác nhau sử dụng các cơ chế khác nhau để quản lý dịch vụ. Phần mềm quản lý dịch vụ được gọi là init , theo tên truyền thống cho quy trình đầu tiên (với ID tiến trình 1) chịu trách nhiệm bắt đầu các quy trình khác.

Debian sử dụng biến thể SysVinit truyền thống của init. Trong hệ thống này, có một tập hợp các tập lệnh trong thư mục /etc/init(vị trí này và vị trí khác có thể thay đổi đôi chút giữa các bản phân phối sử dụng SysVinit). Các tập lệnh này không được gọi trực tiếp, mà thông qua các liên kết tượng trưng trong các thư mục /etc/rc?.d. Chính sự hiện diện và tên của các liên kết tượng trưng này sẽ xác định khi nào các dịch vụ được bắt đầu. Để biết thêm chi tiết, hãy đọc chương về init trong Tài liệu tham khảo Debian .

Có một cái nhìn vào /etc/rc?.dđể xem những dịch vụ đã có mặt. Chữ hoặc chữ số trước dấu chấm là chữ runlevel; các mục có tên bắt đầu bằng Sđược thực thi với đối số startkhi nhập runlevel và các mục có tên bắt đầu bằng Kđược thực thi khi rời runlevel. Trình tự runlevel bình thường là: S trong khi khởi động (vì vậy /etc/rcS.d/S*được thực thi), sau đó 2 (vì vậy /etc/rc2.d/S*được thực hiện). Khi tắt máy, /etc/rc2.d/K*được thực thi, sau đó runlevel chuyển sang 0 (hoặc 6 để khởi động lại).

Tóm lại, nếu bạn muốn tạo một kịch bản khởi động cho một dịch vụ mới:

  • Viết một kịch bản shell trong /etc/init.d. Kịch bản này phải chấp nhận một đối số có thể được start, stop, force-reload, restart, hoặc (tùy chọn) reloadhoặc status. Sự khác biệt giữa reloadrestartrestarttương đương với stoptheo sau startkhi reloadtải lại cấu hình mà không dừng lại bất cứ điều gì (nếu dịch vụ hỗ trợ nó); force-reloadkhông reloadnếu có sẵn và restartnếu không. Xem các tệp hiện có và Tạo tập lệnh chạy khi khởi động với Debian để biết ví dụ.
  • Chạy update-rc.dđể tạo các liên kết tượng trưng để bắt đầu và dừng dịch vụ của bạn. Hầu hết các dịch vụ chạy trong runlevels 2, 3, 4 và 5.

Lưu ý rằng để cung cấp quyền truy cập svn, có thể dễ dàng hơn để thiết lập Apache và sử dụng giao thức HTTP hoặc HTTPS. Điều này có lợi ích phụ là cho phép duyệt kho lưu trữ nhanh chóng thông qua trình duyệt web.


2

Từ một nền tảng unix truyền thống, không có gì đặc biệt về các dịch vụ. Các dịch vụ chỉ là quá trình, nhưng với hai ngoại lệ: chúng không cần thiết bị đầu cuối và chúng bắt đầu khởi động. Làm thế nào chúng bắt đầu khi khởi động phụ thuộc vào init (có thể là sysv init, bsd init, upstart, systemd hoặc thứ gì khác; kiểm tra trang man của bạn để biết init) và liệu bạn đang sử dụng trình bao bọc cho tác vụ hay cho cấu hình init. Không có gì ngăn bạn chạy một dịch vụ từ một thiết bị đầu cuối, trên thực tế, nó là phổ biến cho mục đích thử nghiệm.

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.