Friday, June 27, 2014

Run level trong Linux


Với việc cần thực thi các ứng dụng trên nhiều chế độ khác nhau của hệ thống, trong Linux xuất hiện khái niệm Run level. Run level là các chế độ hoạt động khác nhau của hệ thống. Có 6 chế độ khác nhau của hệ điều hành, và tùy distro khác nhau mà sẽ có định nghĩa khác nhau về số thứ tự của các chế độ. Ví dụ trong Redhat:

0 - halt (Do NOT set initdefault to this)
1 - Single user mode
2 - Multiuser, without NFS (The same as 3, if you do not have networking)
3 - Full multiuser mode
4 - unused
5 - X11
6 - reboot (Do NOT set initdefault to this)

Chế độ Single user mode là một chế độ hỗ trợ người dùng truy cập để thực hiện các recovery hoặc thay đổi password(tham khảo bài viết về thay đổi password tại đây).

Run level mặc định trong Redhat và Debian được định nghĩa trong file /etc/inittab. Ví dụ trong Redhat:

# Default runlevel. The runlevels used by RHS are:
#   0 - halt (Do NOT set initdefault to this)
#   1 - Single user mode
#   2 - Multiuser, without NFS (The same as 3, if you do not have networking)
#   3 - Full multiuser mode
#   4 - unused
#   5 - X11
#   6 - reboot (Do NOT set initdefault to this)
#
id:3:initdefault:
# System initialization.
si::sysinit:/etc/rc.d/rc.sysinit
l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6
# Trap CTRL-ALT-DELETE
ca::ctrlaltdel:/sbin/shutdown -t3 -r now

 Các dòng cấu hình luôn gồm 4 trường cách nhau bởi dấu hai chấm (:)
  •  Trường đầu tiên (ví dụ: id, si, l0, ca, pf, pr) là tên gọi cho dòng đó. Tên gọi không quan trọng nhưng cần khác nhau cho mỗi dòng.
  • Trường thứ hai (ví dụ: 3, 1, 2345 hoặc để trống) là run level mà dòng cấu hình này áp dụng cho. Nếu trường là 2345 thì dòng áp dụng cho 4 run level là 2, 3, 4, 5; nếu để trống thì áp dụng cho tất cả các level.
  • Trường thứ ba (ví dụ: initdefault, sysint, wait, ctrlaltdel, powerfail, respawn) là chỉ dẫn cho init thực hiện các lệnh khi nó ở trong run level ở trường thứ hai.
    • boot: Chạy khi khởi động hệ thống. Với kiểu chạy này, tiến trình sẽ được thực thi với mọi cấp chạy.
    • initdefault: Quy định cấp chạy mặc định. ở tập tin trên thì cấp chạy măc định là 3.
    • respawn: Tiến trình trên dòng này sẽ được khởi động lại nếu nó bị lỗi khi đang chạy. Ví dụ như ở trên, trình getty sẽ được khởi tạo với kiểu chạy respawn. Trong trường hợp mật khẩu và tên người dùng nhập vào không hợp lệ thì getty sẽ lại được khởi động để người dùng nhập lại tên người dùng và mật khẩu.
    • wait : Khởi động tiến trình và chờ cho đến khi tiến trình kết thúc mới thực hiện tiếp các công việc khác.
    • sysinit: Chạy lúc khởi động với mọi cấp chạy và được chạy đầu tiên.
    • once: Tiến trình trên dòng này sẽ chỉ được thực hiện một lần.hực hiên với mọi cấp chạy.
    •   ctrlaltdel: Chạy khi phím Ctrl+Alt+Del được nhấn.
    • bootwait: Khi khởi động, init sẽ thực hiện tiến trình trên dòng này và đợi cho đến khi nó kết thúc.
    • Ngoài ra còn một số kiểu chạy nữa như ondermand, powerokwait...
  • Trường thứ tư (ví dụ: /etc/rc.d/rc 0, /sbin/mingetty tty1) là lệnh hoặc script mà init cần thực thi. Trong ví dụ thì 0 tty1 là đối số truyền vào cho script rc và lệnh mingetty.
Tôi sẽ giải thích ý nghĩa của các lệnh trong ví dụ trên. Đầu tiên: si::sysinit:/etc/rc.d/rc.sysinit là định nghĩa rc.sysinit sẽ được gọi trong quá trình boot trước khi khởi động vào các chế độ của hệ điều hành.

Tiếp theo: id:3:initdefault: - Điều này có nghĩa là mặc định thì hệ điều hành sẽ khởi động với chế độ ứng với id=3 (full multiuser mode).

l0:0:wait:/etc/rc.d/rc 0
l1:1:wait:/etc/rc.d/rc 1
l2:2:wait:/etc/rc.d/rc 2
l3:3:wait:/etc/rc.d/rc 3
l4:4:wait:/etc/rc.d/rc 4
l5:5:wait:/etc/rc.d/rc 5
l6:6:wait:/etc/rc.d/rc 6

Những dòng này thể hiện thư mục chứa các service/script mặc định sẽ được khởi động cùng với chế độ tương ứng của hệ điều hành.

Trong ví dụ minh họa hệ điều hành khởi động với run level là 3 thì hệ điều hành sẽ xác định các services/script nào được khởi động cùng hệ thống trong dòng: l3:3:wait:/etc/rc.d/rc 3.

Trong một số distro thì sau khi khởi động các tiến trình trong rc tương ứng thì sẽ gọi tiếp các script do người dùng định nghĩa và thêm vào trong rc.local.

Tiếp đó là: ca:ctrlaltdel:/sbin/shutdown -t3 -r now có nghĩa là trong quá trình hoạt động có thể nhấn crtl+alt+del để thực hiện shutdown hệ thống. Chế độ này được khuyến cáo là không nên bật để đảm bảo an toàn hệ thống, mà chỉ cho phép người sử dụng tắt bằng lệnh hoặc trong giao diện để tránh mất mát dữ liệu.


-- Jukai Helios --

No comments:

Post a Comment