Cảm ơn anh conmale và nil.
Em xin dịch tiếp một bài về:
Understanding Red Hat Run Levels
Bản English:
http://www.linuxjournal.com/article/1274
Bản dịch:
Với mỗi runlevel các đoạn scripts được chạy để khởi động từng dịch vụ riêng biệt, thay vì một số lượng lớn các file phải chỉnh sửa bằng tay. Những đoạn scripts này được đặt trong thư mục
/etc/rc.d/init.d, và phần lớn đều có một tuỳ chọn
start hoặc
stop. Thiết lập này sẽ bao gồm một chùm các thư mục trong
/etc/rc.d. Đó là:
rc0.d: chứa đựng những đoạn script được chạy khi hệ thống shutdown
rc1.d đến
rc3.d: chứa những đoạn scripts được chạy khi hệ thống thay đổi runlevel. Runlevel 1 thường được sử dụng cho chế độ người dùng đơn. Runlevel 2 cho thiết lập đa người dùng không có NFS. Runlevel 3 cho thiết lập đa người dùng đầy đủ và môi trường mạng.
Runlevel 4 thường không được dùng
Runlevel 5 chứa những đoạn script để khởi tạo hệ thống trong chế độ X11, nó gần giống runlevel 3 ngoại trừ là chương trình xdm được khởi động với một màn hình login đồ hoạ
Runlevel 6: chứa những đoạn scripts được chạy khi hệ thống reboot. Những đoạn scripts này được gọi bởi lệnh reboot
init.d: thường chứa tất cả các scripts. Những file này nằm trong thư mục
rc?.d là những đường link thật sự đến thư mục
init.d
The boot sequence
Hãy xem những gì sẽ xảy ra trong một trình tự boot Red Hat thông thường.
Khi hệ thống khởi động, file
/etc/rc.d/rc.sysinit được chạy đầu tiên. Runlevel khởi động nằm trong
/etc/inittab được tìm thấy và các
/etc/rc.d/rc script được chạy. Trong hầu hết các trường hợp đó là Runlevel 3.
Chương trình rc tìm thấy trong thư mục
/etc/rc.d/rc3.d sẽ thi hành bất cứ
K* script nào với tuỳ chọn stop. Sau đó
tất cả các S* scripts được khởi động với tuỳ chọn start. Các script được khởi động theo thứ bậc giá trị, ví dụ
S10network script được khởi động trước
S85httpd script. Điều này cho phép bạn lưạ chọn chính xác khi nào những đoạn scripts của bạn được chạy, mà không cần phải chỉnh sửa file. Điều tương tự cũng đúng với K* script.
Hãy xem những gì xảy ra khi chúng ta thực hiện chuyển runlevels chẳng hạn từ runlevel 3 (networking và chế độ đa người dùng) sang runlevel 1 (chế độ đơn người dùng).
Đầu tiên tất cả các K* scripts thuộc level của hệ thống đang thay đổi, được thi hành. Red Hat 2.0 cài đặt 7 K* script và 1 S* script trong thư mục /etc/rc.d/rc.1. K* script sẽ shutdown nfs, send mail, lpd, inet, cron, và syslog. Sau đó S* script sẽ kills off bất cứ chương trình còn lại nào và thi hành lệnh:
Code:
để đưa hệ thống về chế độ đơn người dùng. Trong chế độ này bạn có thể chuyển ngược trở lại chế độ đa người dùng bằng cách gõ:
Code:
Side-stepping init
Có 2 điểm chính cần bổ sung:
Đầu tiên, bạn có thể lựa chọn script start hoặc stop, thậm chí khi nó không thuộc runlevel của bạn. Các scripts thi hành nằm trong thư mục:
/etc/rc.d/init.d với tuỳ chọn start hoặc stop sẽ khởi động hoặc dừng bất cứ chương trình hoặc dịch vụ nào mà nó kiểm soát. Điều này cho phép bạn tắt NFS từ runlevel 3 trong khi giữ tất cả các hệ thống khác vẫn hoạt động
Dừng NFS trong trường hợp này sẽ yêu cầu dừng 2 hệ thống: nfsfs, nfs. Nfsfs script sẽ mount hoặc unmount bất kỳ hệ thống file NFS-mounted nào trong
/etc/fstab của bạn. Còn sau đó nfs script sẽ tắt các tiến trình liên kết với NFS, trong trường hợp này là mountd và nfsd.
Do đó thủ tục cho việc shutdown NFS sẽ là:
Code: # /etc/rc.d/init.d/nfs start
Starting NFS services: rpc.mountd rpc.nfsd
# /etc/rc.d/init.d/nfsfs start
Mounting remote filesystems.
#
và khởi động NFS sẽ là:
Code: # /etc/rc.d/init.d/nfs start
Starting NFS services: rpc.mountd rpc.nfsd
# /etc/rc.d/init.d/nfsfs start
Mounting remote filesystems.
#
Managing init Files
Chẳng hạn, nếu bạn không muốn khởi động HTTP daemon, ngoài cách xoá file trong thư mục rc3.d, đơn giản bạn hãy đổi tên
/etc/rc.d/rc3.d/S85httpd thành bất cứ tên gì không bắt đầu bằng các chữ cái viết hoa “S” hoặc “K”. Sự lựa chọn tốt nhất cho bạn là đổi tên chúng thành bắt đầu bằng chữ cái viết thường “s” hoặc “k”. Cách này không chỉ làm cho các đoạn script không được khởi động, nó còn làm cho các file này xuất hiện sau khi bạn dùng lệnh “ls”.
Một chú ý quan trọng ở đây: Hãy chắc chắn rằng bạn biết những đoạn script nào được chạy khi bạn disable chúng. Nếu chẳng hạn bạn disable S10network thì sẽ không có 1 dịch vụ mạng nào của bạn hoạt động. Đó là bởi vì S10network là một low number, những scripts khác phụ thuộc vào mạng phải được thi hành sau khi dịch vụ mạng khởi động
Nếu bạn muốn tạo những init process của riêng bạn để khởi động hoặc dừng. Đơn giản, hãy tạo một đoạn script với một tuỳ chọn start. Nếu đoạn script của bạn khởi động một tiến trình nền, thì bạn cũng nên có thêm tuỳ chọn stop cho nó.
Viết một lần và được đặt trong thư mục
/etc/rc.d/init.d. Hãy nói về những chương trình kiểm tra thời gian trên mạng 15 phút một lần, chúng được gọi là script “
netdate”. Bạn có thể tạo đường link trong thư mục này khi bạn muốn khởi động chúng. Nếu bạn muốn chương trình của bạn được chạy ở runlevel 3, hãy tạo link đến script của bạn từ
/etc/rc.d/rc3.d/S??netdate. Đưa vào vị trí 2 dấu hỏi chấm một con số không xung đột với phần còn lại của thư mục, chẳng hạn S55netdate.
Nếu bạn muốn dừng một tiến trình trong quá trình shutdown, hãy chắc chắn rằng đoạn script của bạn chấp nhận tuỳ chọn stop, sau đó hãy tạo đường link đến
/etc/rc.d/init.d/netdate từ
/etc/rc.d/rc0.d/K55netdate. Một lần nữa hãy chắc chắn rằng con số bạn sử dụng không được dùng bởi bất kỳ một hệ thống con nào khác để tránh sự hỗn loạn.
Bạn có thể test những thiết lập mới của bạn bằng cách dùng init 3. Từ những hệ thống con đang được chạy, chỉ có một cái sẽ khởi động chính là cái bạn đã thêm vào. Nếu lệnh init 3 bị treo, đoạn script của bạn không exit, bạn phải đặt một ký hiệu ở cuối dòng để đặt tiến trình vấn đề trên background. Bạn cũng có thể chạy những đoạn scripts này bằng tay từ thư mục
/etc/rc.d/init.d/ .
Bây giờ bạn đã biết cách thức các hệ thống con làm việc, bạn có thể dễ dàng thêm hoặc chỉnh sửa những hệ thống con đang tồn tại cho thiết lập Linux đặc thù của bạn.