banner
 .::*nix::. An introduction to services, runlevels, and rc.d scripts Go to original post Author: linux.com - Translator: Tống Anh Quân (quanta) - Entry Date: 16/02/2009 00:29:01
Bản English:
http://www.linux.com/article.pl?sid=06/01/03/1728227
Bản tạm dịch:
Một dịch vụ Linux là một ứng dụng chạy trên nền đợi được sử dụng hoặc là carrying out các tác vụ thiết yếu.
Bạn có thể nói gì về các dịch vụ đang chạy, hoặc quan trọng hơn là các dịch vụ cài đặt của chính bạn?

Hãy bắt đầu bằng cách xem cách thức hệ thống khởi động, và trong một thư mục đặc biệt /etc/rc.d. Trong thư mục này, bạn sẽ tìm thấy các file: rc.0, rc.1, rc.2, rc.3, rc.4, rc.5, and rc.6, và một tập hợp các thư mục rc0.d, rc1.d, rc2.d, rc3.d, rc4.d, rc5.d, and rc6.d. Bạn cũng tìm thấy một file với tên là: /etc/inittab. Hệ thống sử dụng những file này để kiểm soát những dịch vụ được khởi động.
Một ví dụ về file /etc/inittab:
Code:


id:4:initdefault:


l0:0:wait:/etc/rc.d/rc.0
l6:6:wait:/etc/rc.d/rc.6
x1:4:wait:/etc/rc.d/rc.4


Tiến trình khởi động sử dụng các tham số này để định danh các runlevel mặc định và các files sẽ được sử dụng bởi các runlevel đó. Trong ví dụ này runlevel 4 là mặc định, và các scripts định nghĩa runlevel 4 có thể được tìm thấy trong /etc/rc.d/rc.4

Vậy Runlevel là gì? Thường bạn sẽ cho rằng nó sẽ tham chiếu đến các levels khác nhau mà hệ thống sẽ sử dụng trong suốt quá trình khởi động. Nhưng thay vào đó hãy xem runlevel như những điểm mà từ đó hệ thống đi vào. Runlevel 1 là cấu hình cơ bản nhất (dành cho truy cập người dùng đơn, môi trường Text), trong khi runlevel 5 là cấu hình cao cấp nhất (đa người dùng, mạng, và GUI). Runlevel 0 và runlevel 6 được sử dụng khi hệ thống tạm nghỉ hoặc khởi động lại.
Tuy nhiên có sự khác nhau giữa các distro của Linux. Ví dụ Fedora sử dụng runlevel 5 cho X-based logins, trong khi Slackware sử dụng runlevel 4 để làm điều này
(Xem bảng liệt kê tóm tắt các cấu hình cho Linux từ url trên)

Khi muốn thay đổi level mặc định, bạn phải sửa theo đường dẫn: /etc/inittab
Tại sao bạn lại muốn thay đổi các runlevel. Bình thường bạn sẽ chỉ sử dụng GUI hoặc text với chế độ đa người dùng- tức là runlevel 4 hoặc 5. bạn sẽ chỉ cần đến runlevel 1 hoặc 2 nếu bạn có một vài vấn đề hệ thống và bạn muốn các truy cập cơ bản. Runlevel 0 và 6 không bao giờ được sử dụng như một cấu hình mặc định. Dĩ nhiên, bạn có thể thay đổi chế độ mà hệ thống đang chạy. Ví dụ:
Code:


init 6


Lệnh này sẽ khởi động lại hệ thống

Quá trình boot sẽ quyết định các runlevel nào được lựa chọn và từ đó sẽ quyết định rc.d script nào được chạy. Hãy xem một vài ví dụ về rc.d script file:
Code:


# Try to use GNOME's gdm session manager:

if [ -x /usr/bin/gdm ]; then
exec /usr/bin/gdm -nodaemon
fi

# Not there? OK, try to use KDE's KDM session manager:
if [ -x /opt/kde/bin/kdm ]; then
exec /opt/kde/bin/kdm -nodaemon
fi

# If all you have is XDM, I guess it will have to do:
if [ -x /usr/X11R6/bin/xdm ]; then
exec /usr/X11R6/bin/xdm -nodaemon
fi


Đây là file rc.4 mặc định của Slackware 10.2

Trong các distro khác bạn sẽ tìm thấy các script để chạy các liên kết tượng trưng thật sự đến các file trong thư mục: /etc/init.d – một kho chứa trung tâm cho tất cả các script. Do đó tất cả những gì bạn phải làm là viết các đoạn script khởi động, đặt nó vào /etc/init.d, sau đó tạo liên kết tượng trưng cho nó từ thư mục runlevel (hoặc file runlevel nếu hệ thống của bạn sử dụng)
Ví dụ, runlevel 2 là runlevel mặc định cho Debian trong môi trường non-GUI. Nếu bạn chạy Apache 2 trên Debian, bạn phải tìm một init script cho Apache 2 trong /etc/init.d được gọi là apache2, một liên kết tượng trưng trỏ đến /etc/init.d/apache2. Điều này sẽ khởi động Apache 2 ở runlevel 2, nhưng chỉ sau khi các dịch vụ với số S thấp hơn được khởi động.

Khi hệ thống shutdown sẽ có một liên kết tượng trưng khác trong thư mục /etc/rc0.detc/rc6.d được khởi động với K thay vì S, liên kết này sẽ shutdown the process.
(Tớ sẽ tìm hiểu và viết một bài khác về S và K sau)
Nếu cảm thấy tất cả những điều này quá rắc rối, bạn có thể đơn giản hơn bằng cách sử dụng file /etc/rc.d/rc.local. File script này được chạy một lần, sau khi các script khác được chạy, nhưng trước khi màn hình logon xuất hiện. Theo mặc định, file này như sau:
Code:


#!/bin/bash

#
# /etc/rc.local - run once at boot time
# Put any local setup commands in here:


Bạn có thể add thêm các đoạn code khác vào cuối, để định nghĩa các script được chạy, ví dụ:
Code:


/root/bin/start_bb


hoặc:
Code:


modprobe -r uhci

modprobe usb-uhci
eciadsl-start
iptable -F
iptables -A INPUT -i ppp0 -p tcp --syb -j DROP
netdate time.nist.gov


hoặc
Code:


apachectl start

echo "/usr/bin/mysqld_safe &" | su mysql


Chú ý rằng với một vài Distro như Debian, nó không sử dụng các rc.local cho các script khởi động

Một điểm nữa, thêm vào các script khởi động, hãy nhớ viết các script close-down để add vào rc.0rc.6. Điều này sẽ làm cho các dịch vụ của bạn shutdown một cách gọn gàng và không để lại bất kỳ một trạng thái lạ nào khi hệ thống tạm nghỉ.

Khi bạn khởi động lại, bạn làm thế nào để dừng các dịch vụ đang chạy? Đơn giản chỉ là đảo ngược của những gì đã làm. Hoặc là chỉnh sửa các file runlevel thích hợp, hoặc là remove những liên kết từ thư mục runlevel. Chú ý rằng, có thể không cần thiết phải làm điều này bằng tay, nhiều distro bao gồm các tool để quản lý các dịch vụ. Ví dụ Red Hat, Fedora sử dụng chkconfig, trong khi Debian sử dụng update-rc.d.


[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to top Go to original post  

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|