Làm thế nào để kích hoạt hoặc vô hiệu hóa dịch vụ?


821

Tôi đã đọc về cách kích hoạt và vô hiệu hóa các dịch vụ trong Ubuntu và dường như có nhiều khả năng khác nhau để quản lý chúng.

Phương pháp đầu tiên tôi tìm thấy là update-rc.dthêm các dịch vụ mới để khởi động, nhằm vào /etc/init.dthư mục và nội dung của nó.

Một cái khác tôi tìm thấy là để chỉnh sửa .confcác tập tin trong /etc/initthư mục.

Cách được đề xuất để bật / tắt / thêm dịch vụ là gì và tại sao?

Bạn có thể vui lòng cho một ví dụ từng bước chống đạn ngắn về cách thêm dịch vụ trong Ubuntu và kích hoạt và vô hiệu hóa nó không?


1
Để kết nối mạng, vui lòng xem: askubfox.com/questions/230698/ trên
Jorge Castro

Điều này sẽ hữu ích cho những người bị mắc kẹt trên Fedora 12 và đã hạ cánh ở đây. Trong trường hợp linkrot chkconfiglà những gì bạn đang tìm kiếm.
Chảy máu ngón tay

3
Lưu ý rằng câu trả lời cho Ubuntu 14.04 vẫn còn thiếu ở đây.
Tăng cường bài

2
@MarcelloNuccio: Bắt đầu với Ubuntu 15.04, Upstart đã bị từ chối ủng hộ Systemd.
Dan Dascalescu

Các chương trình tự khởi động được cấu hình trong autostarttệp kê khai hoặc trong *.servicecác tệp ở một số vị trí, cũng như trong init.dhoặc crontab. Xem: unix.stackexchange.com/a/525845/43233
Noam Manos

Câu trả lời:


831

Có những dịch vụ có thể được bật / tắt bằng GUI (như startupứng dụng) hoặc thiết bị đầu cuối.

Đối với Terminal, bạn có một số tùy chọn. Đầu tiên, mở một thiết bị đầu cuối (ví dụ: gõ "thiết bị đầu cuối" trong dấu gạch ngang và mở nó). Sau đó:

Tạm thời bật / tắt dịch vụ

Để tạm thời dừng và bắt đầu dịch vụ (Không bật / tắt chúng cho các lần khởi động trong tương lai), bạn có thể nhập service SERVICE_NAME. Ví dụ:

  • sudo service apache2 stop(Sẽ DỪNG dịch vụ Apache cho đến khi Khởi động lại hoặc cho đến khi bạn khởi động lại nó).

  • sudo service apache2 start(Sẽ BẮT ĐẦU dịch vụ Apache giả sử nó đã bị dừng trước đó.).

  • service apache2 status (Sẽ cho bạn biết TÌNH TRẠNG của dịch vụ, nếu nó được bật / chạy bị vô hiệu hóa / KHÔNG chạy.).

  • sudo service apache2 restart(Sẽ RESTART dịch vụ. Điều này được sử dụng phổ biến nhất khi bạn thay đổi, tệp cấu hình. Trong trường hợp này, nếu bạn thay đổi cấu hình PHP hoặc cấu hình Apache. Khởi động lại sẽ giúp bạn không phải dừng / bắt đầu với 2 dòng lệnh )

  • service apache2(Trong trường hợp này, vì bạn không đề cập đến HÀNH ĐỘNG để thực thi dịch vụ, nó sẽ hiển thị cho bạn tất cả các tùy chọn khả dụng cho dịch vụ cụ thể đó.) Ví dụ, khía cạnh này thay đổi tùy theo dịch vụ, với MySQL, nó sẽ chỉ đề cập rằng thiếu một tham số. Đối với các dịch vụ khác như dịch vụ mạng, nó sẽ đề cập đến danh sách nhỏ tất cả các tùy chọn có sẵn.


HỆ THỐNG

Bắt đầu với Ubuntu 15.04, Upstart sẽ không được hỗ trợ cho Systemd. Với Systemd để quản lý các dịch vụ, chúng tôi có thể làm như sau:

systemctl start SERVICE- Sử dụng nó để bắt đầu một dịch vụ. Không tồn tại sau khi khởi động lại

systemctl stop SERVICE- Sử dụng nó để dừng một dịch vụ. Không tồn tại sau khi khởi động lại

systemctl restart SERVICE - Sử dụng nó để khởi động lại một dịch vụ

systemctl reload SERVICE - Nếu dịch vụ hỗ trợ, nó sẽ tải lại các tệp cấu hình liên quan đến nó mà không làm gián đoạn bất kỳ quá trình nào đang sử dụng dịch vụ.

systemctl status SERVICE- Hiển thị trạng thái của một dịch vụ. Cho biết liệu một dịch vụ hiện đang chạy.

systemctl enable SERVICE- Bật dịch vụ, bật lại lần tiếp theo hoặc vào sự kiện bắt đầu tiếp theo. Nó vẫn tồn tại sau khi khởi động lại.

systemctl disable SERVICE- Tắt dịch vụ trong lần khởi động lại tiếp theo hoặc vào sự kiện dừng tiếp theo. Nó vẫn tồn tại sau khi khởi động lại.

systemctl is-enabled SERVICE - Kiểm tra xem một dịch vụ hiện đang được cấu hình để bắt đầu hay không trong lần khởi động lại tiếp theo.

systemctl is-active SERVICE - Kiểm tra nếu một dịch vụ hiện đang hoạt động.

systemctl show SERVICE - Hiển thị tất cả các thông tin về dịch vụ.

sudo systemctl mask SERVICE- Hoàn toàn vô hiệu hóa một dịch vụ bằng cách liên kết nó với /dev/null; bạn không thể khởi động dịch vụ theo cách thủ công hoặc kích hoạt dịch vụ.

sudo systemctl unmask SERVICE- Loại bỏ liên kết đến /dev/nullvà khôi phục khả năng kích hoạt và hoặc tự khởi động dịch vụ.


UPSTART (Không dùng nữa kể từ 15.04)

Nếu chúng tôi muốn sử dụng cách Upstart chính thức (Lưu ý rằng, hiện tại, không phải tất cả các dịch vụ đã được chuyển đổi thành Upstart), chúng tôi có thể sử dụng các lệnh sau:

status SERVICE- Điều này sẽ cho chúng tôi biết nếu một dịch vụ chuyển đổi đang chạy hay không. Lưu ý rằng đây là phản đối ủng hộ start, stop, status& restart. Nó cũng sẽ cho chúng tôi biết nếu một dịch vụ chưa được chuyển đổi để bắt đầu:

Một dịch vụ được chuyển đổi thường sẽ xuất trạng thái hiện tại (Bắt đầu, Chạy, Dừng ...) và xử lý ID. Một dịch vụ không được chuyển đổi sẽ gây ra lỗi về một công việc không xác định .

Một số phím tắt có thể chỉ hoạt động với servicelệnh trên nhưng không hoạt động với các lệnh bên dưới trừ khi chúng được chuyển đổi 100% thành dịch vụ mới nhất:

  • BẮT ĐẦU -sudo start mysql

  • DỪNG -sudo stop mysql

  • NHÀ HÀNG -sudo restart mysql

  • TÌNH TRẠNG -sudo status smbd

Kích hoạt / vô hiệu hóa một dịch vụ

Để chuyển đổi dịch vụ bắt đầu hoặc dừng vĩnh viễn, bạn cần phải:

echo manual | sudo tee /etc/init/SERVICE.override

trong đó khổ thơ manualsẽ ngăn Upstart tự động tải dịch vụ vào lần khởi động tiếp theo. Bất kỳ dịch vụ nào có .overridekết thúc sẽ được ưu tiên hơn tệp dịch vụ gốc. Bạn sẽ chỉ có thể bắt đầu dịch vụ theo cách thủ công sau đó. Nếu bạn không muốn điều này thì chỉ cần xóa .override. Ví dụ:

echo manual | sudo tee /etc/init/mysql.override

Sẽ đưa dịch vụ MySQL vào manualchế độ. Nếu bạn không muốn điều này, sau đó bạn có thể làm

sudo rm /etc/init/mysql.override

và Khởi động lại để dịch vụ bắt đầu lại tự động. Tất nhiên để kích hoạt một dịch vụ, cách phổ biến nhất là cài đặt nó. Nếu bạn cài đặt Apache, Nginx, MySQL hoặc những người khác, họ sẽ tự động bắt đầu khi hoàn tất cài đặt và sẽ khởi động mỗi khi máy tính khởi động. Vô hiệu hóa, như đã đề cập ở trên, sẽ sử dụng dịch vụ manual.


Bạn có cần thêm .servicevào mỗi lệnh? systemctl mongod statuslàm việc tốt
Dan Dascalescu

@DanDascalescu không bạn không nhưng hãy để tôi làm rõ điều đó.
Luis Alvarado

4
Có nên đặt tệp .override trong /etc/init.d/, tức là, nơi dịch vụ được đặt không?
Obi Wan - PallavJha

Tại sao Upstart bị phản đối trong 15.04? cách phù hợp để chạy các kịch bản khi bắt đầu / khởi động lại trong Ubuntu 16.04 trở lên là gì?
Kamalakannan

1
Cảm ơn câu trả lời toàn diện này. Tập systemdhợp các lệnh hoạt động một điều trị trên Ubuntu 18.04.
Doktor J

355

Hiện tại thực tế có ba cách khác nhau để phần mềm được bắt đầu như một dịch vụ trong Ubuntu, SysV , Upstartsystemd . Một dịch vụ được định nghĩa ở đây là một chương trình được chạy bởi hệ thống trong nền, trái ngược với một dịch vụ được khởi động và chạy trực tiếp bởi người dùng.

SysV

Cách truyền thống để bắt đầu các dịch vụ trong Linux là đặt một tập lệnh /etc/init.d, sau đó sử dụng update-rc.dlệnh (hoặc trong các bản phân phối dựa trên RedHat chkconfig) để bật hoặc tắt tập lệnh.

Lệnh này sử dụng một số logic phức tạp nhẹ để tạo liên kết tượng trưng /etc/rc#.d, điều khiển thứ tự các dịch vụ bắt đầu. Nếu bạn chạy, ls /etc/rc2.dbạn có thể thấy thứ tự các dịch vụ sẽ bị giết với tên tệp như K##xxxxvà bắt đầu bằng tên tệp S##xxxx. Các ##trong S##xxxxcó nghĩa là một "thứ tự khởi động" cho dịch vụ xxxx. Ngược lại, ##in K##xxxxcó nghĩa là lệnh giết cho dịch vụ xxxx.

Một vấn đề lớn với SysV là khi khởi động hệ thống, mọi thứ phải được thực hiện nối tiếp, hết lần này đến lần khác, khiến thời gian khởi động hệ thống thực sự chậm . Những nỗ lực đã được thực hiện để song song hóa điều này, nhưng chúng thật khó hiểu và khó tận dụng hết. Đây là lý do chính mà Upstart được tạo ra.

Mới bắt đầu

Upstart sử dụng các tệp định nghĩa công việc /etc/initđể xác định những sự kiện nào sẽ bắt đầu dịch vụ. Vì vậy, trong khi hệ thống khởi động, hãy khởi động xử lý các sự kiện khác nhau và sau đó có thể bắt đầu nhiều dịch vụ song song. Điều này cho phép họ sử dụng đầy đủ các tài nguyên của hệ thống, ví dụ, bằng cách bắt đầu dịch vụ gắn trên đĩa trong khi dịch vụ ràng buộc CPU khác chạy hoặc trong khi mạng đang chờ địa chỉ IP động được gán.

Bạn có thể xem tất cả các tệp công việc mới bắt đầu bằng cách chạy ls /etc/init/*.conf

Hãy để tôi dừng lại ở đây và nói rằng nếu bạn không biết dịch vụ là gì hoặc dịch vụ đó là gì, ĐỪNG vô hiệu hóa nó!

Không phải tất cả các dịch vụ đã được chuyển đổi để bắt đầu. Trong khi làm việc với nhóm máy chủ tại Canonical trong vài tháng qua, tôi đã làm việc với một số tệp công việc được chuyển đổi và phần hay nhất là nó cho phép một người thoát khỏi tất cả các "kịch bản" ma thuật và chỉ cần đưa vào một vài lệnh ở đây và ở đó để xác định chính xác làm thế nào để bắt đầu dịch vụ, và không có gì nữa. Nhưng hiện tại, chỉ một số ít các dịch vụ mạng truyền thống, như mựcsamba , đã được chuyển đổi.

Là một dịch vụ mới nhất dựa trên?

Để tìm hiểu xem một dịch vụ có dựa trên cơ sở mới không, bạn có thể chạy lệnh trạng thái:

status servicename

Nếu đó là một công việc mới , nó sẽ hiển thị điều này:

$ status statd
statd start/running, process 942

Nhưng nếu không, bạn sẽ thấy một cái gì đó giống như thế này:

$ status apache2
status: Unknown job: apache2

Trong trường hợp này, apache2chưa được chuyển đổi sang mới nổi . Vì vậy, để vô hiệu hóa apache2bạn chỉ cần chạy

sudo update-rc.d apache2 disable
sudo service apache2 stop

Vô hiệu hóa dịch vụ (công việc) khi mới bắt đầu

Định nghĩa công việc mới bắt đầu không có update-rc.dlệnh. Để vô hiệu hóa công việc, bạn cần chỉnh sửa trực tiếp tệp công việc để vô hiệu hóa nó. Có hai cách để làm điều này.

Nếu bạn muốn vẫn có thể tự khởi động nó, thì bạn cần phải nhận xét start onđiều kiện. Giả sử bạn muốn cài đặt samba , nhưng không có nó tự động bắt đầu. Đây là tập tin công việc (trong natty):

description "SMB/CIFS File Server"
author      "Steve Langasek <steve.langasek@ubuntu.com>"

start on local-filesystems
stop on runlevel [!2345]

respawn

pre-start script
    RUN_MODE="daemons"

    [ -r /etc/default/samba ] && . /etc/default/samba

    [ "$RUN_MODE" = inetd ] && { stop; exit 0; }

    install -o root -g root -m 755 -d /var/run/samba
end script

exec smbd -F

Để vô hiệu hóa samba , bạn chỉ cần đặt một dấu #ở phía trước dấu " start on local-filesystems". Lưu ý rằng mặc dù nó sẽ không khởi động lại khi khởi động, nhưng bạn vẫn cần dừng nó lần này với

sudo service smbd stop

Tuy nhiên, nếu bạn không bao giờ muốn samba bắt đầu, tôi thực sự khuyên bạn nên gỡ bỏ gói. Tuy nhiên, nếu bạn muốn nó được cài đặt, nhưng không thể khởi động, bạn cũng có thể làm:

mv /etc/init/smbd.conf /etc/init/smbd.conf.disabled

Vô hiệu hóa một dịch vụ bằng cách sử dụng bắt đầu / dừng khổ thơ (kể từ ngày 11.04)

Bắt đầu với phiên bản mới bắt đầu vào ngày 11.04, có một từ khóa mới vô hiệu hóa start onstop onkhổ thơ : manual. Vì vậy, một cách khác để vô hiệu hóa dịch vụ kể từ ngày 11.04 là làm:

echo 'manual' | sudo tee /etc/init/mysql.override

# command from root shell
echo manual >> /etc/init/mysql.override

Bạn có thể tạo một overridetệp để vô hiệu hóa một dịch vụ mà không cần chỉnh sửa định nghĩa công việc, chỉ bằng cách đặt manualtừ khóa vào đó.


20
Hình như 11.04 cũng có ghi đè. Vì vậy, echo manual >> /etc/init/<service>.overridenó được ưa thích hơn vì nó còn nguyên vẹn. Dù sao, vẫn còn một điều đáng tiếc là một tính năng bật / tắt cơ bản như vậy phải mất 3 năm để phát triển và không có GUI cho điều đó.
MestreLion

3
update-rc.d là những gì thực sự quan trọng
Timofey

2
dường như rất nhiều mor lấy chủ đề ban đầu hơn câu trả lời đã được gắn thẻ là câu trả lời dứt khoát của người đăng câu hỏi ban đầu. Cảm ơn! :)
Henning

1
Trong trường hợp của tôi, các tập tin /etc/init/ssh.conftồn tại nhưng status sshstatus sshdcả hai nói "Không biết công việc". Câu trả lời này dường như không giải quyết một khả năng như vậy?
Brian Z

1
status sshcũng cho tôi 'Công việc không xác định', nhưng cũng hiệu service ssh statusquả với tôi
ptim

129

sysv-RC-conf

Hãy thử sử dụng sysv-rc-conf

sudo apt-get install sysv-rc-conf

và để bắt đầu quản lý dịch vụ, hãy thực thi

sudo sysv-rc-conf

Mà sẽ đưa lên cửa sổ tương tác như thế này

nhập mô tả hình ảnh ở đây

Bạn có thể điều hướng thêm qua các trang bằng cách sử dụng Ctrl+ncho trang tiếp theo và Ctrl+pcho trang trước. Bạn có thể kích hoạt và vô hiệu hóa các dịch vụ bằng cách chọn SPACEtrên các đường băng mong muốn.

Việc làm-Quản trị viên

Một lựa chọn khác sẽ là Jobs-Admin bằng cách cài đặt thông qua

sudo apt-get install jobs-admin

Cái nào cũng cung cấp GUI như thế này

xem trước công việc-quản trị viên

Để hiển thị nhiều công việc hơn, bạn phải đánh dấu vào Hiển thị công việc được bảo vệ từ menu của nó.

chkconfig

Và tùy chọn thứ ba sẽ là chkconfig ,

sudo apt-get install chkconfig

Nó có thể được sử dụng thông qua CLI chkconfig, hiển thị danh sách các công việc Bật / Tắt. Ngoài ra chúng ta có thể xem các dịch vụ hệ thống bằng cách sử dụngchkconfig –list

Dịch vụ có thể được bật bằng cách sử dụng

chkconfig <service> on

Dịch vụ có thể được tắt bằng cách sử dụng

chkconfig <service> off

Và chúng tôi thậm chí có thể thêm dịch vụ của riêng mình, sử dụng tập lệnh init phù hợp với tiêu đề phù hợp.

chkconfig --add <service>

cập nhật-RC.d

Và một tùy chọn khác có thể được giới thiệu ở đây update-rc.d , được giải thích ngắn gọn ở đây .

Lưu ý rằng đối với Ubuntu Server 12.04, update-rc.d được sử dụng thay vì chkconfig.


1
trên máy chủ ubuntu:Package chkconfig is not available, but is referred to by another package.
pwned

@pwned Bạn có thể tự do chỉnh sửa và đăng thông tin cập nhật về phiên bản máy chủ. Cảm ơn bạn.
atenz

Tôi đã làm như bạn đã đề xuất, bây giờ nó là để đánh giá ngang hàng.
pwned

jobs-admin không cho phép thay đổi công việc (Ubuntu 14.04), tạo báo cáo sự cố thay thế ;-)
Sadi

5
sysv-rc-conf không phù hợp để sử dụng cho người mới bắt đầu hoặc systemd, nó chỉ dành cho hệ thống RC System 5 cũ, vốn không được mặc định trên Ubuntu Linux trong gần một thập kỷ. Lỗi Debian # 791689 thừa nhận điều này và câu hỏi tại sao nó không được đánh dấu là xung đột với systemd.
JdeBP

48

Đối với những người trong chúng ta chạy Ubuntu qua ssh, tôi nghĩ tùy chọn đẹp nhất là rcconf- một chương trình dựa trên văn bản:

sudo apt-get install rcconf
sudo rcconf

văn bản thay thế

Điều hướng bằng các phím tab và mũi tên, nhấn phím cách để bật / tắt. Thay đổi là liên tục trên khởi động lại.

Ảnh chụp màn hình mượn từ blogpost này , cũng hiển thị sysv-rc-conf- một công cụ tương tự cũng cho phép bạn đặt runlevel. (Đối với những người tình cờ quan tâm đến runlevels muốn thay đổi chúng :)

Thật không may, RCconf không hoạt động với upstart (dịch vụ được liệt kê trong /etc/init/*), chỉ với cơ chế truyền thống ( ls -l /etc/init.d/*- những dịch vụ không phải là liên kết tượng trưng).

May mắn thay, nhiều dịch vụ có liên quan khi ssh-ing vào máy chủ (Apache, Tomcat, mdadm, boinc-client ...) vẫn chưa được chuyển sang khởi động.


6
Điều này vẫn còn làm việc với upstart?
oKtosiTe

3
Tiếc là không có. Nhưng nó đã hoạt động cho tất cả các trường hợp tôi muốn thay đổi - các công việc mới bắt đầu dường như chủ yếu là những thứ tôi không bao giờ muốn vô hiệu hóa - đồng hồ phần cứng, daemon đăng nhập, mạng, v.v. (trên máy chủ Ubuntu, ít nhất). Nhưng đó là điều cần chú ý (Tôi không :), tôi đã cập nhật bài viết.
jg-faustus

Thật không may, mysql đã được chuyển đổi để bắt đầu. Và đó là một dịch vụ tôi chỉ sử dụng khi tôi đang thực hiện một số dự án.
MestreLion

Có một lỗi với RCconf trên Ubuntu 12.04 khiến chương trình không thể khởi động. Để giải quyết vấn đề bạn cần cài đặt gói hộp thoại.
devius

1
Vì câu trả lời này đã được viết, update-rc.dđã được thay đổi và một số chức năng không dùng nữa của nó đã bị xóa . Lỗi Debian # 727735 lưu ý rằng RCconf không được thay đổi để phù hợp. Và không, RCconf cũng không hoạt động với systemd, do đó không thể áp dụng cho một trong các hệ thống init mặc định cho Ubuntu Linux trong thập kỷ qua.
JdeBP

18

Tôi phát hiện ra rằng có công cụ GUI này, một cái gì đó giống như BUM nhưng tương thích với Upstart:

  • Việc làm-Quản trị viên

    sudo apt-get install jobs-admin
    

Nhưng nó quá đơn giản và không cho phép thay đổi "công việc được bảo vệ" (công việc đó là gì? Apple có Jobs, hệ điều hành có daemon!)
kakaz 19/12/13

Tôi thậm chí không cho phép thay đổi "công việc không được bảo vệ" (Ubuntu 14.04), tạo báo cáo sự cố thay thế ;-)
Sadi

12

Chỉnh sửa tập tin cấu hình mới bắt đầu (như được mô tả ở trên) không phải là một ý tưởng tốt. Gói cập nhật có thể cung cấp cấu hình cập nhật và bạn phải lặp đi lặp lại các thay đổi của mình.

Bằng cách xem xét man 5 initmột người sẽ tìm thấy một giải pháp phù hợp hơn: sử dụng cấu hình ghi đè. Ví dụ ngắn: Giả sử chúng tôi có một dịch vụ gọi là "foobar", vì vậy sẽ có một tệp được gọi /etc/init/foobar.confvới cấu hình mới nhất của nó. Bây giờ bạn không muốn xóa tệp đó, cũng không phải sửa đổi nó - nhưng bạn không muốn dịch vụ này chạy? Vì vậy, đặt một tệp ghi đè bên cạnh nó : /etc/init/foobar.override, chứa (tùy chọn tiêu đề có mô tả và) thay vào đó start on/ stop ondòng bạn đặt một dòng có một từ : manual. Bằng cách này, bạn sẽ foobar.confbắt đầu sử dụng cơ bản , nhưng ghi đè định nghĩa khởi động để chỉ bắt đầu dịch vụ đó khi được thực thi thủ công (thông qua service foobar startví dụ của chúng tôi).



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.