Suchart.Blog –> ITupstart.com

Debian vs Redhat Runlevel

เรื่องของเรื่องก็คือว่า หลังจากติดตั้งลีนุกซ์เสร็จ ถ้าผมจะทำเป็น server ผมมักจะรันใน text mode แต่ตอนติดตั้งบางทีผมก็ลงส่วนของ desktop หรือ graphic ไปด้วย (อาจจะด้วยเหตุผลอะไรบางอย่าง) ทำให้ระบบทำงานในกราฟฟิกโหมดทันทีที่ติดตั้งเสร็จ

สำหรับทั้งสองค่ายมีไฟล์ที่ใช้กำหนด runlevel เหมือนกันคือ /etc/inittab แต่มีการกำหนดสถานะไว้ต่างกัน

# บางส่วนจากไฟล์ /etc/inittab

Redhat/Fedora

# 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:

ส่วน Debian

# The default runlevel.
id:2:initdefault:

# /etc/init.d executes the S and K scripts upon change
# of runlevel.
#
# Runlevel 0 is halt.
# Runlevel 1 is single-user.
# Runlevels 2-5 are multi-user.
# Runlevel 6 is reboot.

นั่นคือใน Redhat นั้นจะมีการกำหนดไว้เลยว่า runlevel 3 นั้นจะเป็น muti-user ในแบบเท็กท์โหมด และ runlevel 5 นั้นจะเป็น multi-user ในแบบกราฟิกโหมด ดังนั้นถ้าเราต้องการรันในโหมดไหนก็แค่กำหนดหมายเลข runlevel ในไฟล์ /etc/inittab บรรทัด

id:3:initdefault:

# ในที่นี้คือ runlevel 3 ถ้าต้องการรันในกราฟฟิกโหมดก็แค่เปลี่ยนจาก 3 เป็น 5 (แต่ก็แน่นอนว่าจะ็ต้องลงส่วนประกอบทางด้านกราฟฟิกเอาไว้ด้วย)

แต่ในกรณีของ Debian นั้นดูเหมือนว่ามันจะไม่ง่ายอย่างนั้นซะแล้ว(แต่ก็ไม่ได้ยากจนเกินไป) Debian นั้นกำหนดว่า Runlevel 2-5 เป็น multi-user mode (Default คือ Runlevel 2) แต่ไม่ได้กำหนดว่า Runlevel ไหนเป็นโหมดกราฟฟิก

ไฟล์เชลล์สคริปต์จริงๆ ที่ใช้รันเซอร์วิสต่างๆ ของทั้งสองค่ายนั้นจะอยู่ทีไดเรกตอรี /etc/init.d แต่ในแต่ละ Runlevel นั้นจะมีไดเรกตอรี /etc/rcx.d (ใน Redhat จริงๆ แล้วมันลิงค์ไปยัง /etc/rc.d/rcx.d อีกชั้น) โดย x คือหมายเลขของแต่ละ Runlevel ซึ่งเก็บไฟล์ที่ลิงค์ไปยังสคริปต์ที่ต้องการ start หรือ stop ใน /etc/init.d

# Redhat

[root@myfedora etc]# ls -l /etc/rc3.d/
lrwxrwxrwx 1 root root 15 Apr 10 10:10 K15httpd -> ../init.d/httpd
lrwxrwxrwx 1 root root 15 Apr 10 10:10 K35dhcpd -> ../init.d/dhcpd
lrwxrwxrwx 1 root root 17 Apr 10 10:10 K35dovecot -> ../init.d/dovecot
lrwxrwxrwx 1 root root 13 Apr 10 10:10 K35smb -> ../init.d/smb
lrwxrwxrwx 1 root root 16 Apr 10 10:10 S60vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 17 Apr 10 10:10 S80postfix -> ../init.d/postfix
lrwxrwxrwx 1 root root 13 Apr 10 10:10 S85gpm -> ../init.d/gpm
lrwxrwxrwx 1 root root 18 Apr 10 10:10 S85lighttpd -> ../init.d/lighttpd
lrwxrwxrwx 1 root root 15 Apr 10 10:10 S90crond -> ../init.d/crond
lrwxrwxrwx 1 root root 15 Apr 10 10:10 S90squid -> ../init.d/squid
# Debian

kandalf:/etc# ls -l /etc/rc2.d
lrwxrwxrwx 1 root root 15 Aug 2 2005 K20inetd -> ../init.d/inetd
lrwxrwxrwx 1 root root 13 Aug 2 2005 K20lpd -> ../init.d/lpd
lrwxrwxrwx 1 root root 20 Sep 1 2005 K20postgresql -> ../init.d/postgresql
lrwxrwxrwx 1 root root 16 Aug 29 2005 K20quagga -> ../init.d/quagga
lrwxrwxrwx 1 root root 18 Sep 9 2005 K21asterisk -> ../init.d/asterisk
lrwxrwxrwx 1 root root 14 Sep 1 2005 K40frox -> ../init.d/frox
lrwxrwxrwx 1 root root 20 Aug 2 2005 K79nfs-common -> ../init.d/nfs-common
lrwxrwxrwx 1 root root 16 Jan 7 2006 S20vsftpd -> ../init.d/vsftpd
lrwxrwxrwx 1 root root 15 Dec 26 2005 S30squid -> ../init.d/squid
lrwxrwxrwx 1 root root 13 Aug 3 2005 S89atd -> ../init.d/atd
lrwxrwxrwx 1 root root 14 Aug 3 2005 S89cron -> ../init.d/cron
lrwxrwxrwx 1 root root 17 Mar 15 07:46 S91apache2 -> ../init.d/apache2

ลิงค์ที่ขึ้นต้นด้วย K คือเซอร์วิสที่จะ stop

ลิงค์ที่ขึ้นต้นด้วย S คือเซอร์วิสที่จะ start

ใน Redhat นั้นการจะกำหนดให้เซอร์วิสทำงานในแต่ละ Runlevel นั้นจะใช้คำสั่ง ntsysv หรือ chkconfig

ใน Debian นั้น โดยปกติจะไม่มีคำสั่งในลักษณะนี้มาให้ จะมีคำสั่ง update-rc.d และยังสามารถติดตั้งเพิ่มอีกได้ เช่น sysv-rc-conf ซึ่งจะเป็นโปรแกรมแบบเมนูในคอนโซลซึ่งใช้งานง่ายกว่า หรือไม่เช่นนั้นก็ต้องแก้ไขเอง โดยใน Debian 4.0ได้มีคำแนะนำไว้ในไฟล์ /etc/rc2.d/README ไว้ด้วยว่า ถ้าต้องการปิดเซอร์วิสใด ก็ให้เปลี่ยนชื่อไฟล์ จาก S นำหน้าเป็น K นำหน้า ตามด้วยตัวเลขที่เกิดจากการลบตัวเลขเดิมออกจาก 100 เช่น ถ้าต้องการปิดเซอร์วิสทางด้านกราฟฟิก (gdm) ใน Runlevel 2 ใช้คำสั่ง

mv /etc/rc2.d/S21gdm /etc/rc2.d/K79gdm

แต่ถ้าต้องการให้กลับมาทำงานเหมือนเดิมก็เปลี่ยนกลับเป็นเหมือนเดิม

#See Also
man init
man runlevel
man update-rc.d

Advertisements

ให้ความเห็น »

ยังไม่มีความเห็น

RSS feed for comments on this post. TrackBack URI

ใส่ความเห็น

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / เปลี่ยนแปลง )

Twitter picture

You are commenting using your Twitter account. Log Out / เปลี่ยนแปลง )

Facebook photo

You are commenting using your Facebook account. Log Out / เปลี่ยนแปลง )

Google+ photo

You are commenting using your Google+ account. Log Out / เปลี่ยนแปลง )

Connecting to %s

บลอกที่ WordPress.com .

%d bloggers like this: