Pages

Friday, December 12, 2008

Một số cách chạy dịch vụ tự động trong Linux

Các server luôn có nhu cầu khởi động các dịch vụ mình đảm nhiệm lúc boot máy, do đó khi cài một dịch vụ mới lên, bạn phải biết cách làm cho nó tự động chạy. Sau đây là một số cách mà Abel đã làm.

1. Trên các hệ điều hành Debian like (Ubuntu, SuSE...): Dùng công cụ update-rc.d
Ví dụ sau khi cài xong bind (gói DNS Server), Abel muốn cho trình named (file exe của bind) phải tự động chạy khi máy khởi động. Vị trí của file named là: /usr/bin/named.

1.1 Đầu tiên Abel viết một đoạn shell script nho nhỏ với ba nhiệm vụ chính sau đây:
-Kiểm tra xem file /usr/bin/named có thể thực thi được hay không
-Kiểm tra file cấu hình /etc/named có tồn tại hay không
-Nếu hai điều kiện trên thỏa thì xuất ra dòng "Starting named" và chạy file /usr/bin/named


Cụ thể nó thế này:

Code:

#!/bin/sh
#file khoi dong named luc boot may

if test −x /usr/bin/named −a −f /etc/named.conf
then
echo "Starting named"
/usr/bin/named
Fi

(Với những dịch vụ khác cách viết file script là hoàn toàn tương tự)
1.2 Lưu nó lại với cái tên gì đó, ví dụ bootnamed, rồi nhét nó vô thư mục /etc/init.d
1.3 "Biến" nó thành file exe: chmod 755 /etc/init.d/bootnamed
1.4 Dùng lệnh
Code:

update-rc.d bootnamed defaults

Để cập nhật bootnamed vào các thư mục rc.d, các thư mục mà khi boot hệ thống sẽ vào kiểm tra để lôi dịch vụ ra chạy. Tham số defaults cho biết bootnamed sẽ được boot tự động ở init-mode default của hệ thống (ví dụ trong file inittab bạn để init default là 3 thì cứ vào 3 là nó chạy named!)
1.5 Reboot lại máy để kiểm tra

2. Trên các hệ điều hành Redhat like (Redhat, CentOS, Fedora...): Dùng công cụ chkconfig
Đây là một công cụ quản lí service at boottime rất mạnh của Redhat. Ví dụ để xem các service nào được auto run ở level 3, ta dùng lệnh:
Code:

[root@centos init.d]# chkconfig --list | grep 3:on
atd 0:off 1:off 2:off 3:on 4:on 5:on 6:off
syslog 0:off 1:off 2:on 3:on 4:on 5:on 6:off
sendmail 0:off 1:off 2:on 3:on 4:on 5:on 6:off
autofs 0:off 1:off 2:off 3:on 4:on 5:on 6:off
network 0:off 1:off 2:on 3:on 4:on 5:on 6:off
...

Để enable một service ở level được định trước:
Code:

[root@centos init.d]# chkconfig wine on
[root@centos init.d]# chkconfig --list wine
wine 0:off 1:off 2:on 3:on 4:off 5:off 6:off

Disable nó ở tất cả các level:
Code:

root@centos init.d]# chkconfig wine off
[root@centos init.d]# chkconfig --list wine
wine 0:off 1:off 2:off 3:off 4:off 5:off 6:off

Đặc điểm của chkconfig là ta không cần tạo script như với update-rc.d, mà chkconfig sẽ đọc một số dòng đầu của file thực thi của dịch vụ (hay còn gọi là file rc) để xác định file thực thi đó sẽ chạy ở các level nào và độ ưu tiên như thế nào. Ví dụ với dịch vụ sshd ta xem thử file thực thi nó có cái gì
Code:

[root@centos init.d]# head -8 sshd
#!/bin/bash
#
# Init file for OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: OpenSSH server daemon
#

Ý nghĩa các tham số:
Code:

# chkconfig: 2345 55 25
| | |
| | độ ưu tiên của kill scripts
| |
| độ ưu tiên của start scripts
|
các level mà service được start (2, 3, 4, 5)

Giờ ta sẽ đưa named vào các dịch vụ được boot khi khởi động máy
2.1 Kiểm tra named đã được autorun ở level nào chưa:
Code:

[root@centos init.d]# chkconfig --list named
named 0:off 1:off 2:off 3:off 4:off 5:off 6:off

2.2 Sửa file rc của named lại để cho nó auto run ở level 3. Ban đầu do không autorun ở level nào hết nên 8 dòng đầu của named rc file có dạng:
Code:

[root@cent init.d]# head -8 named
#!/bin/bash
#
# named This shell script takes care of starting and stopping
# named (BIND DNS server).
#
# chkconfig: _ 55 45
# description: named (BIND) is a Domain Name Server (DNS) \
# that is used to resolve host names to IP addresses.

Ta sửa dòng chkconfig thành:
Code:

#chkconfig: 3 55 45

2.3 Add named vào trình quản lí chkconfig
Code:

[root@centos init.d]# chkconfig named --add

2.4 Enable nó lên
Code:

[root@centos init.d]# chkconfig named on

2.5 Kiểm tra lại
Code:

[root@centos rc2.d]# chkconfig named --list
sshd 0:off 1:off 2:off 3:on 4:off 5:off 6:off

Thế là xong!

Kết: Hãy chắc chắn là bạn hoàn toàn kiểm soát được những dịch vụ nào đang autorun trên hệ thống của bạn.

(sưu tầm)

2 comments:

tisina said...

Bạn vui lòng cho mình hỏi, trong bài viết của bạn, phần hướng dẫn dành cho các hệ Debian like có đoạn:

-Kiểm tra file cấu hình /etc/named có tồn tại hay không

Cụ thể nó thế này:
#!/bin/sh
#file khoi dong named luc boot may
if test −x /usr/bin/named −a −f /etc/named.conf
then

Mình muốn hỏi là file cấu hình đó mình tạo ra bằng cách nào?
Sau khi mình chạy lệnh update-rc.d thì mới chỉ thấy các file tương ứng trong các thư mục rc#.d được tạo ra. Còn file named.conf thì không tìm thấy ở đâu cả.
Và chương trình của mình vẫn không tự chạy sau khi boot.

Rất mong được bạn chỉ giúp

tisina said...

Địa chỉ của mình là tisina@gmail.com