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 , 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 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.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 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.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 bằng tên tệp S##xxxx
. Các ##
trong S##xxxx
có nghĩa là một "thứ tự khởi động" cho dịch vụ xxxx
. Ngược lại, ##
in 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, 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ực và samba , đã đượ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, apache2
chưa được chuyển đổi sang 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
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.d
lệ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 on
và stop on
khổ 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 override
tệ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 manual
từ khóa vào đó.