Ubuntu12.04: Cách vô hiệu hóa quy trình trình nền khi khởi động


23

Tôi thường sử dụng service start/stophoặc initctl start/stopđể bắt đầu hoặc dừng quá trình trình nền nhưng bây giờ điều tôi đang tìm kiếm là vô hiệu hóa quy trình trình nền bắt đầu từ ví dụ khởi động mysqld.

Hiện tại những gì đang làm là đổi tên /etc/init/mysql.confthành /etc/init/mysql.conf.baknhưng sau khi đọc một chút về systemdtôi đã biết rằng nó cung cấp enable & disabletùy chọn cho nhiệm vụ trên.

Vì vậy, có một cái gì đó tương tự trong Ubuntu 12.04 với upstart.


Bạn nói rằng bạn đang sử dụng systemd? Tôi sử dụng nó trên máy tính Fedora 17 của tôi. systemctl [enable|disable|is-enabled] mysqld.service
BenjiWiebe

1
@BenjiWiebe: Không, tôi không sử dụng systemd. Tôi đang sử dụng upstart vì systemd không phải là mặc định trong ubfox 12.04 / 12.10.
RanRag

1
oh tôi hiểu rồi ... Không chắc tôi đang nghĩ gì.
BenjiWiebe

Câu trả lời:


26

Bạn có thể vô hiệu hóa các dịch vụ bằng cách chạy lệnh sau:

sudo update-rc.d -f <service name> disable

Đoạn trích trang Man :

Khi chạy với các tùy chọn vô hiệu hóa [S | 2 | 3 | 4 | 5], update-rc.d sửa đổi các liên kết runlevel hiện có cho tập lệnh /etc/init.d/name bằng cách đổi tên liên kết bắt đầu để dừng liên kết với số thứ tự bằng chênh lệch 100 trừ đi số thứ tự ban đầu.


2
Tôi không đủ uy tín để bỏ phiếu này và làm như vậy mà không có lời giải thích nào là bất lịch sự, vì vậy chỉ cần một nhận xét: Câu hỏi của @Noob liên quan đến Ubuntu 12.04 sử dụng cấu hình Upstart (/etc/init/*.conf tệp) cho hầu hết các trình nền hệ thống (như được đề cập bởi @Noob) trong khi đề xuất của bạn chỉ hoạt động cho trình tiện ích bắt đầu sử dụng tập lệnh trong /etc/init.d/* (kiểu SysV cũ). Chỉnh sửa: Đối với bản ghi, warl0ck có câu trả lời đúng (cảm ơn!).
xolox

3
Câu hỏi là về một tình huống giả định hoặc nói chung sử dụng mysql như một trường hợp chuyên đề cụ thể. OP dường như ít nhất biết một phần câu trả lời này, nhưng nó có thể phục vụ tốt cho hậu thế khi lưu ý rằng một số gói hữu ích không và không tôn trọng định dạng mới nhất (như webmin và nhiều gói tự xây dựng từ thời điểm nhận xét) . Điều đó có nghĩa là phương pháp này có thể là một câu trả lời một phần hợp lệ cho ngữ cảnh, giống như câu trả lời của warl0ck và Mark làm để giải quyết điểm cụ thể của dịch vụ mysql giả định được cài đặt với trình quản lý gói.
JustinC

Cờ -f là không cần thiết.
dannyman

20

Cách chính xác để vô hiệu hóa và khởi động dịch vụ, là tạo tệp XX.override,

echo 'manual' > /etc/init/mysqld.override

Bằng cách đó, dịch vụ mới bắt đầu sẽ không tự động bắt đầu


Đây có còn hoạt động với Ubuntu 12.04?
RSK

@RSK vâng, tại sao bạn không thử?
cúc

1
Tôi đã thử và không làm việc cho tôi. Hãy thử lại và sẽ cập nhật cho bạn.
RSK

Không, nó không hoạt động trên Ubuntu-14.04.
Hi-Angel

1
@RSK yes, why don't you just give it a try?Tôi cho rằng, vì rất bất tiện khi khởi động lại hệ thống với "thử" cho mọi lời khuyên từ trang này.
dùng907860

7

@ warl0ck có quyền; muốn thêm rằng thông tin này được ghi lại khá tốt trong tài liệu Upstart: http://upstart.ubfox.com/cookbook/#diseac-a-job-from-automatically-starting

Đặc biệt:

Với Upstart 1.3, bạn có thể sử dụng các tệp ghi đè và khổ thơ thủ công để đạt được kết quả tương tự theo cách đơn giản hơn [27]:

# echo "manual" >> /etc/init/myjob.override

Lưu ý rằng bạn có thể đạt được hiệu quả tương tự bằng cách làm điều này:

# echo "manual" >> /etc/init/myjob.conf

Tuy nhiên, sử dụng tiện ích ghi đè có nghĩa là bạn có thể để tập tin cấu hình công việc ban đầu không bị ảnh hưởng.

Để trở lại hành vi ban đầu, hãy xóa hoặc đổi tên tệp ghi đè (hoặc xóa khổ thơ thủ công khỏi tệp ".conf" của bạn).


5

Ngoài ra còn có một phần mềm đẹp để hỗ trợ trong việc này. Nó được gọi là RCconf.

Chỉ cần tải xuống bằng cách sử dụng:

sudo apt-get install rcconf

và sử dụng nó với lệnh

rcconf

Bạn nhận được một giao diện (dòng lệnh) đẹp để vô hiệu hóa / kích hoạt dịch vụ.


Điều này không được bao gồm trên hệ thống, vì vậy cài đặt nhiều thứ hơn sẽ không phải là câu trả lời tốt hơn.
m3nda

nhưng thực sự hữu ích: D
Magico

1

Hãy thử điều hướng /etc/rc2.dvà đổi tên những gì bạn muốn không chạy khi khởi động: thay đổi "ban đầu, vốn)" thành "K" (ví dụ: S02mysqlthành K02mysql). Nếu bạn đổi ý, chỉ cần đảo ngược nó. Tôi nghĩ rằng 2 đề cập đến runlevel, trong trường hợp 2 là mặc định, runlevel nhiều người dùng. Có lẽ đó là nơi bạn có hầu hết mọi thứ để sử dụng máy tính hàng ngày.

Chỉnh sửa : Đọc bình luận của James O'Gorman bên dưới.


1
Có '2' đề cập đến cấp độ chạy. Bạn có thể kiểm tra mức độ chạy hiện tại của bạn bằng cách sử dụng who -rhoặc runlevel.
RanRag

Đó là sự thật , who --runlevel.
Emanuel Berg

1
Trong khi điều này đạt được những gì bạn muốn, về mặt kỹ thuật đó là điều sai trái. Trong thuật ngữ SysV init, tập lệnh 'S' là tập lệnh bắt đầu và 'K' là tập lệnh kill - tức là S được chạy theo thứ tự khi khởi động và K được chạy theo thứ tự khi tắt máy (hoặc thay đổi thành runlevel thấp hơn).
James O'Gorman

@ JamesO'Gorman: Thật thú vị, tôi đang sử dụng Debian, bạn đang nói "tập lệnh K" của tôi đang chạy khi tắt máy phải không? Có một số chữ cái có thể được sử dụng để vô hiệu hóa hoàn toàn tập lệnh, không có bất kỳ nguy hiểm nào không? (Thật là thiết thực khi giữ chúng trong cùng một thư mục, nếu một tình huống mới phát sinh khi bạn muốn chúng.)
Emanuel Berg

@EmanuelBerg Có, initsẽ chạy 'KXXscript stop' khi tắt máy. Bạn nên xóa symlink hoặc xóa bit thực thi khỏi tập lệnh init thực. Tôi tin rằng Debian sử dụng update-rc.dđể quản lý điều này. Sử dụng RHEL (và các dẫn xuất) chkconfig.
James O'Gorman

0

Với Upstart, cấu hình dịch vụ nằm trong các tập tin /etc/init/. Ví dụ: ssh được điều khiển bằng tệp cấu hình/etc/init/ssh.conf

Tập tin này chỉ định "sự kiện" sẽ nhắc Upstart bắt đầu "công việc".

Để ngăn dịch vụ bắt đầu tự động, một trong một số phương pháp có thể được sử dụng:
a) Đổi tên tệp service.conf để nó không kết thúc bằng .conf
b) Nhận xét dòng "start on" từ tệp service.conf.

Trong các phiên bản mới hơn của upstart (ít nhất là từ v1.3), bạn cũng có thể ghi đè lên phần bắt đầu trên dòng bằng tệp service.override, do đó bạn có thể sử dụng:
# echo manual > /etc/init/service.override

Cuối cùng, bạn cũng có thể thêm từ khóa "thủ công" vào cuối tệp cấu hình của dịch vụ, ví dụ: qua:
# echo manual >> /etc/init/service.conf

Lưu ý rằng điều này không "dừng" dịch vụ đang chạy, nó chỉ ngăn không cho nó bắt đầu tự động. Trong khi được đặt để khởi động "thủ công", bạn điều khiển dịch vụ bằng initctl, ví dụ: để dừng và khởi động trình nền SSH:
# initctl stop ssh
# initctl start ssh

Có thể cho rằng tài liệu tốt nhất cho Upstart là tại http://upstart.ubfox.com/cookbook/

Mục 11.44 bao gồm "vô hiệu hóa dịch vụ khỏi tự động bắt đầu, tại đây: http : //upstart.ub Ubuntu.com/cookbook/#diseac-a-job-from-automatically-starting


0

Vâng, tôi phải nói rằng tuyên bố

echo "manual" >> /etc/init/myjob.override

là một chút sai lệch bởi vì nó có nghĩa là nối thêm tập tin ghi đè. Tôi đã thử nghiệm điều này vào ngày 14.04 với người quản lý mạng và sau đây không hoạt động

vim /etc/init/network-manager.override:
start
manual

Tuy nhiên điều này đã làm việc

vim /etc/init/network-manager.override:
#start
manual

Vì vậy, IMO, initctl tìm kiếm dòng chưa hoàn thành đầu tiên và thực hiện nó. Có thể tôi sai, nhưng đó là những kết quả kiểm tra của tôi. Đầu vào được chào đón.

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.