Các thư mục RC0.d, rc1.d, trong / etc


30

Tôi đang chạy Ubuntu, nơi tôi có các thư mục /etc/rc0.d, /etc/rc1.d, /etc/rc2.d, ..., /etc/rc6.d.

Tệp ví dụ từ máy của tôi:

directory      example symlinks in the dir
------------------------------------------
/etc/rc1.d:    K76dovecot, K77ntp
/etc/rc2.d:    S23ntp, S24dovecot
/etc/rc3.d:    S23ntp, S24dovecot
/etc/rc4.d:    S23ntp, S24dovecot
/etc/rc5.d:    S23ntp, S24dovecot

Câu hỏi:

  1. Mục đích của nhiều thư mục "RC" là gì?
  2. Tại sao Ubuntu cài đặt các bản sao dovecotntpvào tất cả các thư mục ngoại trừ rc0.drc6.d?
  3. Nếu chúng được chỉ định nhiều lần như trên, chúng có thực sự được thực hiện nhiều lần không?
  4. Bạn có thể cho biết từ trên theo thứ tự dovecotntpsẽ thực hiện khi khởi động?
  5. Cách thích hợp để bảo Ubuntu luôn luôn thực thi ntptrước khi dovecotkhởi động là gì?

Câu trả lời:


23
  1. Đây là runlevels và là một khởi tạo kiểu V hệ thống được sử dụng bởi hầu hết các hệ thống * NIX (với ngoại lệ đáng chú ý là các systemdhệ thống dựa trên cơ sở). Khi khởi động kernel / user quyết định cái gì runlevelsẽ chạy và chỉ thực thi cái đó runlevel. Có nghĩa là tùy thuộc vào runlevelbạn có thể khởi động với một bộ chương trình khác nhau. Cũng có những đường băng để tạm dừng và khởi động lại, nhưng vì bạn đang tập trung vào phần khởi động, bây giờ hãy bỏ qua chúng.
  2. Vì chỉ có một runlevelđược thực thi khi khởi động, một số chương trình nên / muốn bắt đầu / dừng ở các runlevels khác nhau với các tham số khác nhau hoặc giống nhau theo cùng một thứ tự hoặc khác nhau (không phải tất cả các runlevels đều giống nhau trong tất cả các hệ điều hành). Nhưng Ubuntu sao chép runlevels 3-5 từ 2, đó là lý do tại sao chúng giống nhau.
  3. Số runlevelđược thực hiện chỉ một lần khi khởi động hoặc khi bạn thay đổi runlevel.
  4. ntpcác tập lệnh nên thực thi trước sau đó dovecottrong runlevel 2-5, không phải là trường hợp cho runlevel 1. Số thứ tự trong tên tập lệnh ( ) cho biết thứ tự thực hiện. Vì vậy, tất cả phụ thuộc vào runlevel bạn đang sử dụng.S23ntp
  5. Nó phụ thuộc vào Distro nhưng trong trường hợp cụ thể của Ubuntu, bạn có thể thêm tập lệnh của mình vào runlevel 1 và 2.

Thông tin thêm trong bài viết Wikipedia về run runels Ubuntu


Vì vậy, nếu tôi đặt tập lệnh cho tất cả các thư mục RC.X, nó sẽ thực thi vài lần hay không?
Flash Thunder

@FlashThunder không.
Braiam

40

Như những người khác đã lưu ý, câu trả lời là tất cả về runlevel mà về cơ bản các phương thức hoạt động của một hệ điều hành. Trên Linux, chúng thường là:

ID  Name                               Description
0   Halt                               Shuts down the system.
1   Single-user Mode                   Mode for administrative tasks.
2   Multi-user Mode                    Does not configure network interfaces and 
                                       does not export networks services.
3   Multi-user Mode with Networking    Starts the system normally.
4   Not used/User-definable            For special purposes.
5   Start the system normally with 
    with GUI                           As runlevel 3 + display manager.
6   Reboot                             Reboots the system.

Vì vậy, mỗi rcNthư mục chứa các liên kết tượng trưng đến các tập lệnh nên được chạy tại runlevel đó. Tất cả các tập lệnh thực tế thường là trong /etc/init.dthư mục:

$ ls -l /etc/rc5.d/S22cron
lrwxrwxrwx 1 root root 14 Jan 14  2013 /etc/rc5.d/S22cron -> ../init.d/cron

Đặt tên liên kết tượng trưng

Một liên kết tượng trưng có tên bắt đầu bằng một Ssẽ được bắt đầu tại runlevel trong câu hỏi trong khi những người có tên bắt đầu Ksẽ bị giết. Lưu ý rằng tất cả các liên kết trong rc6.d, runlevel khởi động lại, bắt đầu với K. Đó là bởi vì tất cả chúng nên được dừng lại để khởi động lại và không có gì nên được bắt đầu.

Các số sau chữ cái đầu tiên đề cập đến thứ tự chạy của các tập lệnh được liên kết. Những người có số lượng nhỏ hơn sẽ được chạy trước những người có số lượng cao hơn. Vì vậy, trong ví dụ cụ thể của bạn, S23ntpsẽ được chạy (bắt đầu trong trường hợp này) trước S24dovecot .


Câu trả lời chính xác! Điều gì sẽ xảy ra nếu hai tập lệnh có cùng số, ví dụ: S01bluetoothS01rsyncthứ tự sẽ tùy ý?
direprobs

@direprobs huh, câu hỏi hay. Vâng, tôi đoán rằng một trong hai sẽ được chọn ngẫu nhiên. Không thể nói rằng tôi biết, mặc dù.
terdon

@tredon Tôi nghĩ rằng họ sẽ được chọn dựa trên tên tệp của họ vì họ bắt đầu S01so sánh sẽ là b< r, bạn hiểu ý. Có lẽ!
direprobs

1
Câu trả lời ngắn gọn là, /etc/init.d/rcnói for s in /etc/rc$runlevel/S*; do …, vì vậy nó chỉ đơn giản là đi để mở rộng glob; tức là số / chữ cái Câu trả lời dài là mã trong đó phức tạp hơn tôi nhớ rất nhiều. Tôi sẽ cố gắng dành thời gian nghiêm túc để nghiên cứu nó đôi khi trong vòng sáu đến tám tuần tới. Thoạt nhìn, có vẻ như nó trích xuất số sau Svà làm một cái gì đó với nó, vì vậy S42beeblebroxS42zaphodcó thể được liên kết chặt chẽ hơn, nói, S43arthurS44dent.
G-Man nói 'Phục hồi Monica'

thực sự cảm ơn vì câu trả lời tuyệt vời, nhưng tôi có một câu hỏi Tôi đặt chương trình của mình khi khởi động, nhưng tốc độ của ứng dụng thấp: stackoverflow.com/questions/49251955/
Kẻ

4

1) Nhiều thư mục RCX.d chỉ định dịch vụ nào sẽ bắt đầu hoặc dừng trong runlevel 'X'.

2) RC0.d dành cho runlevel 0 đang tắt máy. RC6.d là để khởi động lại. Tất cả phần còn lại dành cho các đường băng khác nhau (2 - 5). Chữ S là viết tắt của bắt đầu và K cho Kill. Đây thực chất là các liên kết đến các tập lệnh gốc trong /etc/rc.d. Các số sau S / K là mức độ ưu tiên mà các dịch vụ sẽ được bắt đầu / Giết.

3) Có nếu chúng được chỉ định nhiều lần, tập lệnh start / kill sẽ được chạy nhiều lần. Nhưng không ai muốn làm điều đó.

4) Nhìn vào các số ưu tiên, dịch vụ ntp sẽ được bắt đầu trước tiên là dovecot.

5) Điểm thứ 4 là cách.

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.