Câu hỏi Làm cách nào để bật hoặc tắt dịch vụ?


Tôi đọc về cách bật và tắt các dịch vụ trong Ubuntu và có vẻ như có những 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.d để thêm các dịch vụ mới để khởi động, nhắm vào /etc/init.d và nội dung của nó.

Người khác tôi tìm thấy là chỉnh sửa .conf các tệp trong /etc/init thư mục.

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

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


761
2017-12-29 21:03


gốc


Để kết nối mạng, vui lòng xem: askubuntu.com/questions/230698/… - 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 tại đây. Trong trường hợp linkrot chkconfiglà những gì bạn đang tìm kiếm. - Bleeding Fingers
Lưu ý rằng câu trả lời cho Ubuntu 14.04 vẫn còn thiếu ở đây. - Reinier Post
@MarcelloNuccio: Bắt đầu với Ubuntu 15.04, Upstart đã không được hỗ trợ cho Systemd. - Dan Dascalescu


Các câu trả lời:


Có các 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 terminal (gõ "terminal" trong dấu gạch ngang, ví dụ, và mở nó). Sau đó:

Tạm thời cho phép / vô hiệu hóa dịch vụ

Để dừng và bắt đầu dịch vụ tạm thời (Không bật / tắt chúng cho 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 LẠI 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ẽ KHỞI ĐẦ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 kích hoạt / chạy của vô hiệu hóa / không chạy.).

  • sudo service apache2 restart (Sẽ KHỞI ĐỘNG LẠI dịch vụ. Điều này thường được sử dụng nhất khi bạn đã thay đổi, một tập tin 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 tránh khỏi việc 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 ACTION để thực hiện cho dịch vụ, nó sẽ hiển thị cho bạn tất cả các tùy chọn có sẵn cho dịch vụ cụ thể đó.) Khía cạnh này khác nhau tùy thuộc vào dịch vụ, ví dụ, với MySQL nó sẽ chỉ đề cập đến nó thiếu thông 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ỏ của tất cả các tùy chọn có sẵn.


SYSTEMD

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 ta có thể thực hiện các thao tác 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 dịch vụ

systemctl reload SERVICE - Nếu dịch vụ hỗ trợ nó, 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 dịch vụ. Cho biết dịch vụ hiện có đang chạy hay không.

systemctl enable SERVICE - Bật dịch vụ, vào lần khởi động lại 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ụ khi khởi động lại lần 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 có được cấu hình để khởi động hay không trong lần khởi động lại kế tiếp.

systemctl is-active SERVICE - Kiểm tra xem một dịch vụ có đang hoạt động không.

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

sudo systemctl mask SERVICE - Vô hiệu hóa hoàn toàn 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 bật dịch vụ.

sudo systemctl unmask SERVICE - Xóa liên kết tới /dev/null và khôi phục khả năng bật và hoặc bắt đầu dịch vụ theo cách thủ công.


UPSTART (Không được chấp nhận từ 15.04)

Nếu chúng ta muốn sử dụng cách thức 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 thành Upstart), chúng ta có thể sử dụng các lệnh sau:

status SERVICE - Điều này sẽ cho chúng tôi biết liệu một dịch vụ được chuyển đổi có đang chạy hay không. Lưu ý rằng điều này không được ủ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 thành mới nổi:

Một dịch vụ được chuyển đổi thường sẽ xuất hiện 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ẽ đưa ra một lỗi về công việc không rõ.

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

  • KHỞI ĐẦU - - sudo start mysql

  • DỪNG LẠI - - sudo stop mysql

  • KHỞI ĐỘNG LẠI - - sudo restart mysql

  • TRẠNG THÁI - - sudo status smbd

Bật / tắt dịch vụ

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

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

nơi stanza manual sẽ ngừng 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 với .override kết thúc sẽ được ưu tiên hơn so với 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 manual chế độ. Nếu bạn không muốn điều này, sau đó bạn chỉ đơn giản là có thể làm

sudo rm /etc/init/mysql.override

và Khởi động lại để dịch vụ tự động khởi động lại. 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, chúng sẽ tự động bắt đầu khi cài đặt xong 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.


757
2017-12-29 21:26



Bạn có cần phải thêm .service cho mọi lệnh? systemctl mongod status làm việc tốt. - Dan Dascalescu
@DanDascalescu không bạn không, nhưng hãy để tôi làm rõ rằng có. - Luis Alvarado♦
Tệp .override có cần phải được đặt trong /etc/init.d/, tức là, nơi dịch vụ được đặt không? - Obi Wan - PallavJha
Tại sao Upstart không được dùng nữa trong 15.04? cách đúng để chạy script khi bắt đầu / khởi động lại trong ubuntu 16.04 hoặc mới hơn là gì? - Kamalakannan J
@KamalakannanJ bạn đã sử dụng các cấp độ rc chưa? (ví dụ: /etc/rc0.d) hoặc /etc/rc.local? - Luis Alvarado♦


Hiện tại có ba cách khác nhau để phần mềm được bắt đầu như một dịch vụ trong Ubuntu, SysV, Upstart và systemd. 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 chương trình đượ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 kịch bản vào /etc/init.dvà sau đó sử dụng update-rc.d lệnh (hoặc trong các bản phân phối dựa trên RedHat, chkconfig) để bật hoặc tắt nó.

Lệnh này sử dụng một số logic phức tạp nhẹ để tạo các liên kết trong /etc/rc#.d, kiểm soát thứ tự dịch vụ bắt đầu. Nếu bạn chạy ls /etc/rc2.d bạn có thể thấy thứ tự các dịch vụ sẽ bị giết với tên tệp như K##xxxx và bắt đầu với tên tệp S##xxxx. Các ## trong S##xxxx có nghĩa là "thứ tự bắt đầu" cho dịch vụ xxxx. Ngược lại, ## trong K##xxxx có 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, tất cả mọi thứ phải được thực hiện trong nối tiếp, một điều khác, làm cho thời gian khởi động hệ thống thực sự chậm. Nỗ lực đã được thực hiện để song song điều này, nhưng họ đã lộn xộn và khó tận dụng hết. Đây là lý do chính mà Upstartđã được tạo ra.

Upstart

Upstart sử dụng các tệp định nghĩa công việc trong /etc/init để xác định những gì các sự kiện một dịch vụ nên được bắt đầu. Vì vậy, trong khi hệ thống đang khởi động, khởi động quá trình 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ọ tận dụng đầy đủ các tài nguyên của hệ thống, ví dụ, bằng cách bắt đầu một dịch vụ gắn kết đĩa lên trong khi một dịch vụ CPU ràng buộc khác chạy, hoặc trong khi mạng đang đợi một đị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 nổi 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 một dịch vụ là gì, hoặc những gì nó làm, đừng vô hiệu hóa nó!

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

Là một dịch vụ mới nổi?

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

status servicename

Nếu đó là một mới nổi công việc, 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, apache2 chưa được chuyển đổi thành mới nổi. Vì vậy, để vô hiệu hóa apache2 bạn chỉ cần chạy

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

Tắt dịch vụ (công việc) trong quá trình khởi động

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

Nếu bạn vẫn muố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 sambanhưng không bắt đầu tự động. Đây là tệp 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

Để tắt samba, bạn có thể đặt # ở phía trước của "start on local-filesystems"Lưu ý rằng mặc dù nó sẽ không bắt đầu sao lưu khi khởi động, bạn vẫn cần phải dừng lại 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 khuyên bạn nên xóa gói. Tuy nhiên, nếu bạn muốn nó được cài đặt, nhưng không thể khởi động được, bạn cũng có thể thực hiện:

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

Vô hiệu hoá dịch vụ bằng cách sử dụng dấu ngắt bắt đầu / dừng (tính đến 11.04)

Bắt đầu với phiên bản mới bắt đầu sẽ có trong 11.04, có một từ khóa mới vô hiệu hóa start on và stop on stanzas: manual. Vì vậy, một cách khác để vô hiệu hóa dịch vụ là 11.04 là phải 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 override tệp để vô hiệu hoá dịch vụ mà không cần chỉnh sửa định nghĩa công việc, chỉ cần đặt manual từ khóa trong đó.


335
2018-01-06 18:25



Có vẻ như 11.04 cũng đã ghi đè. Vì thế echo manual >> /etc/init/<service>.override được ưa chuộng vì nó để nguyên bản gốc .conf filke. Dù sao, nó vẫn còn là một sự xấu hổ rằng một cơ bản cho phép / vô hiệu hóa mất 3 năm để phát triển, và theres không có GUI cho điều đó. - MestreLion
update-rc.d là những gì thực sự quan trọng - Tim
dường như nhiều mor ehandle chủ đề ban đầu hơn câu trả lời đã được gắn thẻ như là câu trả lời defintive bởi poster câu hỏi ban đầu. Cảm ơn! :) - Henning
Trong trường hợp của tôi, tập tin /etc/init/ssh.conf tồn tại nhưng status ssh và status sshd cả hai đều nói "Công việc không xác định". Câu trả lời này dường như không giải quyết được một khả năng như vậy? - Brian Z
status ssh mang lại cho tôi 'công việc không rõ', nhưng service ssh status làm việc cho tôi - ptim


sysv-rc-conf

Thử sử dụng sysv-rc-conf

sudo apt-get install sysv-rc-conf

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

sudo sysv-rc-conf

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

enter image description here

Bạn có thể điều hướng thêm thông qua các trang bằng cách sử dụng Ctrl+n cho trang tiếp theo và Ctrl+p cho trang trước. Bạn có thể bật và tắt dịch vụ bằng cách chọn SPACEtrên runlevel mong muốn.

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

Một thay thế khác sẽ là Việc làm-Quản trị bằng cách cài đặt thông qua

sudo apt-get install jobs-admin

Mà cũng cung cấp GUI như thế này

jobs-admin preview

Để 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à lựa 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 On / Off. Ngoài ra chúng tôi có thể xem các dịch vụ hệ thống bằng cách sử dụng chkconfig –list

Dịch vụ có thể được bật bằ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 một tập lệnh init thích hợp với các tiêu đề thích hợp.

chkconfig --add <service>

update-rc.d

Và một tùy chọn khác có thể được gọi tại đây update-rc.d , 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.


121
2018-06-28 18:00



trên máy chủ ubuntu: Package chkconfig is not available, but is referred to by another package. - pwned
@pwned Bạn được 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 đã gợi ý, bây giờ nó là lên cho xem xét ngang hàng. - pwned
việc làm-admin không cho phép thay đổi công việc (Ubuntu 14.04), thay vào đó tạo báo cáo sự cố ;-) - Sadi
sysv-rc-conf không thích hợp để sử dụng với upstart hoặc systemd, nó chỉ được sử dụng cho hệ thống rc cũ của hệ thống 5, mà không phải là 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ác câu hỏi tại sao nó chưa được đánh dấu là xung đột với systemd. - JdeBP


Đối với những người trong chúng ta, những người chạy Ubuntu trên ssh, tôi nghĩ rằng lựa chọn tốt 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

alt text

Đ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. Các thay đổi liên tục trong quá trình khởi động lại.

Ảnh chụp màn hình được mượn từ bài đăng trên blog 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 thiết lập runlevel. (Đối với những người tình cờ quan tâm đến runlevel muốn thay đổi chúng :)

Thật không may, rcconf không làm việc 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 người 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ột máy chủ (Apache, Tomcat, mdadm, boinc-client ...) chưa được chuyển sang khởi động.


48
2018-01-06 18:44



Điều này vẫn làm việc với mới nổi? - oKtosiTe
Tiếc là không có. Nhưng nó đã làm việc cho tất cả các trường hợp mà tôi muốn thay đổi - những công việc mới nổi 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 vv (trên máy chủ Ubuntu, ít nhất). Nhưng đó là một cái gì đó để nhận thức được (tôi đã không :), tôi đã cập nhật bài viết. - j-g-faustus
Thật không may mysql đã được chuyển đổi để mới nổi. Và đó là một dịch vụ tôi chỉ sử dụng khi im làm một số dự án. - MestreLion
Có một lỗi với rcconf trên Ubuntu 12.04 ngăn chương trình bắt đầu. Để giải quyết vấn đề bạn cần cài đặt gói hộp thoại. - devius
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 thay đổi để khớp. Và không, rcconf 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


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

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

    sudo apt-get install jobs-admin
    

18
2018-05-21 10:27



Nhưng nó quá đơn giản và không cho phép thay đổi "các công việc được bảo vệ" (các công việc đó là gì? Apple có Jobs, hệ điều hành có các trình tiện ích!) - kakaz
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 ra một báo cáo sự cố thay thế ;-) - Sadi


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

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


12
2018-06-30 20:27





Ngoài ra còn có Trình quản lý khởi động.

Để cài đặt: sudo apt-get install bum

Thêm thông tin: http://www.marzocca.net/linux/bum.html

enter image description here


8
2018-05-20 14:47



Đừng quên kiểm tra nút "Nâng cao". - not2qubit