รับทําเว็บไซต์ รับทําseo
บทความที่น่าสนใจ

บทความ ที่น่าสนใจ

Linux Server (CentOS) : การเปิดเซอร์วิสตอนบู๊ตเครื่องของ CentOS

    หลังจากที่ติดตั้งโปรแกรม คอนฟิกค่าต่างๆ แล้วทดสอบการเปิด ปิดเซอร์วิสด้วยคำสั่ง service ได้ผลตามที่ต้องการแล้ว

    หากต้องการให้เมื่อบู๊ตเครื่องทุกครั้ง ให้เปิด (start) เซอร์วิสนี้ขึ้นมาด้วย หรือทุกครั้งที่เรียกคำสั่งปิดเครื่อง (shutdown) ให้ปิด (stop) เซอร์วิสนี้ก่อน

    สามารถทำได้โดยแก้ไขไฟล์ที่อยู่ใน /etc/rc.d/rcX.d/ โดย X เป็นตัวเลขแสดง runlevel แสดงถึงสถานะของเครื่อง

    ในไฟล์ /etc/inittab จะอธิบายความหมายของตัวเลขค่า runlevel ที่กำหนดไว้

    บางส่วนของไฟล์ /etc/inittab

    [root@cent6 ~]# tail /etc/inittab # Default runlevel. The runlevels used 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:

    การบู๊ตเครื่อง

    ในเบื้องต้นขออธิบายคร่าวๆ เกี่ยวกับการบู๊ตเครื่อง runlevel และการรันเซอร์วิสดังนี้

    - เมื่อบู๊ตเครื่องขึ้นมาทุกครั้ง หลังจากที่โหลด kernel เรียบร้อย init จะเป็นโปรเซสแรกที่ถูกรันขึ้นมา

    - init จะอ่านไฟล์ /etc/inittab เพื่อหาบรรทัดที่มีคอนฟิก “initdefault” เพื่อกำหนดค่า runlevel เริ่มต้น โดยส่วนใหญ่แล้วจะเป็น 3 (runlevel 5 จะคล้ายกับ 3 ทุกอย่างยกเว้นจะมีการรันเซอร์วิส X Window ขึ้นมาด้วย)

    - สมมติว่าเข้าสู่ runlevel 3 จะมีการรันสคริปต์ไฟล์ต่างๆ ที่อยู่ใน /etc/rc.d/rc3.d/ โดยจะรันเฉพาะชื่อไฟล์ที่ขึ้นต้นด้วยตัวอักษร “S” (เอสตัวใหญ่) เรียงตามลำดับชื่อไฟล์ (ตัวเลข)

    ตัวอย่างสคริปต์ไฟล์ที่มีชื่อไฟล์ขึ้นต้นด้วยตัวอักษร “S” สังเกตว่าแต่ละไฟล์จะเป็นลิ้งค์ไฟล์แบบ soft link ชี้ไปยังสคริปต์ไฟล์จริงๆ ที่อยู่ใน ../init.d/ หรือพาธเต็มๆ คือ /etc/rc.d/init.d/ ที่มาพร้อมกับการติดตั้งโปรแกรมจากไฟล์ rpm นั่นเอง

    [root@cent6 ~]# cd /etc/rc.d/rc3.d/ [root@cent6 rc3.d]# ls -l S* lrwxrwxrwx. 1 root root 17 Mar 24 13:46 S01sysstat -> ../init.d/sysstat lrwxrwxrwx. 1 root root 22 Mar 24 13:46 S02lvm2-monitor -> ../init.d/lvm2-monitor lrwxrwxrwx. 1 root root 19 Mar 24 13:45 S08ip6tables -> ../init.d/ip6tables lrwxrwxrwx. 1 root root 18 Mar 24 13:44 S08iptables -> ../init.d/iptables lrwxrwxrwx. 1 root root 17 Mar 24 13:45 S10network -> ../init.d/network ... 

    สมมติว่าเราติดตั้งเว็บเซิร์ฟเวอร์ Apache จากไฟล์ rpm ที่อยู่ในแผ่นติดตั้ง CentOS 6 จะมีการสร้างลิ้งค์ไฟล์ใน /etc/rc.d/rc3.d/ ด้วย แต่โดยมาก ดีฟอลต์ของการติดตั้ง ชื่อลิ้งค์ไฟล์ที่ติดตั้งมา จะขึ้นต้นด้วยตัวอักษร “K”

    [root@cent6 rc3.d]# ls -l *httpd lrwxrwxrwx. 1 root root 15 Apr 6 17:16 K15httpd -> ../init.d/httpd 

    แปลว่าหากมีการบู๊ตเครื่องใหม่ Apache จะไม่ถูกรันขึ้นมาโดยอัตโนมัติ หากต้องการแก้ไขให้รัน Apache ตอนบู๊ตเครื่องด้วย ก็สามารถทำได้โดยเปลี่ยนตัวอักษรขึ้นต้นจากตัวอักษร “K” ให้เป็นตัว “S”

    ตัวอย่างการแก้ไข (ไม่แนะนำให้ทำแบบนี้) เช่น

    [root@cent6 rc3.d]# mv K15httpd S15httpd

    [root@cent6 rc3.d]# ls -l *httpd lrwxrwxrwx. 1 root root 15 Apr 6 17:16 S15httpd -> ../init.d/httpd 

    หลังจากแก้ไขแล้ว ลองบู๊ตเครื่องดู ก็จะมีการพยายามรัน httpd ขึ้นมาเหมือนกัน แต่ปัญหาของการแก้ไขเองแบบนี้ อาจทำให้การรันโปรแกรมหรือเซอร์วิสนี้มีปัญหาได้ ยกตัวอย่างเพิ่มอีกโปรแกรมคือ MySQL

    ตัวอย่างลิ้งค์ไฟล์ที่สร้างจากการติดตั้งไฟล์ rpm

    [root@cent6 rc3.d]# ls -l *mysqld lrwxrwxrwx. 1 root root 16 Apr 1 10:34 K36mysqld -> ../init.d/mysqld

    ถ้าเราต้องการให้รัน MySQL ตอนบู๊ตเครื่องด้วย

    สมมติว่าเราแก้ไขด้วยคำสั่ง mv แล้วเปลี่ยนเฉพาะตัวอักษรหน้าจาก “K” ให้เป็น “S”

    [root@cent6 rc3.d]# mv K36mysqld S36mysqld

    [root@cent6 rc3.d]# ls -l *mysqld lrwxrwxrwx. 1 root root 16 Apr 1 10:34 S36mysqld -> ../init.d/mysqld

    เมื่อบู๊ตเครื่องใหม่ แล้วเข้าสู่ runlevel 3 เซอร์วิส Apache จะถูกรันขึ้นมาก่อน MySQL เพราะตัวเลขน้อยกว่า ซึ่งอาจทำให้เว็บโปรแกรมที่จำเป็นต้องเชื่อมต่อฐานข้อมูลมีปัญหาได้

    วิธีการแก้ไขอย่างถูกต้อง และเป็นวิธีที่แนะนำสำหรับ CentOS 6  เพื่อให้มีการเปิดเซอร์วิสตอนบู๊ตเครื่อง หรือเข้าสู่ runlevel 3 ต้องใช้คำสั่ง chkconfig

    ก่อนจะไปขั้นตอนต่อไป เปลี่ยนชื่อไฟล์ให้เหมือนเดิม

    [root@cent6 rc3.d]# mv S15httpd K15httpd [root@cent6 rc3.d]# mv S36mysqld K36mysqld
     
    คำสั่ง chkconfig

    ใช้คำสั่ง chkconfig ตามด้วยออปชั่น –list แล้วตามด้วยชื่อเซอร์วิสเช่น httpd เพื่อแสดงสถานะการรันเซอร์วิสในแต่ละ runlevel

    [root@cent6 rc3.d]# chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    ตัวเลข 0-6 คือ runlevel ส่วน on, off จะเป็นคอนฟิกแสดงว่าให้เปิด หรือปิด เซอร์วิส เมื่อเข้าสู่ runlevel นั้นๆ

    เช่น runlevel 3 ของ httpd คือ off หมายถึงไม่มีการรันเซอร์วิสนี้เมื่อเข้าสู่ runlevel 3

    หากต้องการให้รันเซอร์วิสนี้ ให้ใช้คำสั่ง chkconfig ตามด้วยชื่อ service แล้วตามด้วย on ตัวอย่างเช่น

    [root@cent6 rc3.d]# chkconfig httpd on

    [root@cent6 rc3.d]# chkconfig --list httpd httpd 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    [root@cent6 rc3.d]# ls -l *httpd lrwxrwxrwx. 1 root root 15 Apr 7 16:05 S85httpd -> ../init.d/httpd

    จะเห็นว่าสถานะของ runlevel 2,3,4,5 ของ httpd เปลี่ยนเป็น on แปลว่าถ้าเข้าสู่ runlevel เหล่านี้ รวมทั้ง 3 (บู๊ตเครื่อง) จะมีการรันเซอร์วิสนี้ด้วย

    เมื่อใช้คำสั่ง ls -l เพื่อดูลิ้งค์ไฟล์ ชื่อไฟล์ก็จะเปลี่ยนเป็นขึ้นต้นด้วย “S” พร้อมทั้งตัวเลขก็เปลี่ยนไปด้วย

    ลองเปลี่ยนคอนฟิกให้รัน MySQL ขึ้นมาตอนบู๊ตเครื่องด้วย

    [root@cent6 rc3.d]# chkconfig --list mysqld mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    [root@cent6 rc3.d]# chkconfig mysqld on

    [root@cent6 rc3.d]# chkconfig --list mysqld mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

    [root@cent6 rc3.d]# ls -l *mysqld lrwxrwxrwx. 1 root root 16 Apr 7 16:08 S64mysqld -> ../init.d/mysqld

    ตอนนี้ทุกครั้งที่มีการบู๊ตเครื่องเข้าสู่ runlevel 2,3,4,5 จะมีการรัน MySQL ขึ้นมาด้วย สังเกตตัวเลข 64 แปลว่า MySQL จะถูกรันขึ้นมาก่อน Apache ซึ่งมีตัวเลข 85

    ตัวเลขลำดับในการรันของแต่ละเซอร์วิส จะถูกกำหนดอยู่ในสคริปต์ไฟล์ เช่น

    [root@cent6 ~]# cat /etc/rc.d/init.d/httpd #!/bin/bash # # httpd Startup script for the Apache HTTP Server # # chkconfig: - 85 15 ... 

    จะอยู่ในบรรทัดที่มีคำว่า chkconfig จะมีอยู่สองตัวเลข คือ 85 และ 15

    ตัวเลขแรก 85 คือลำดับที่ในการเปิด (start) เซอร์วิส

    ตัวเลขที่สอง 15 คือลำดับที่ในการปิด (stop) เซอร์วิส

    [root@cent6 ~]# cat /etc/rc.d/init.d/mysqld #!/bin/sh # # mysqld This shell script takes care of starting and stopping # the MySQL subsystem (mysqld). # # chkconfig: - 64 36 ... 

    ส่วนของ mysqld ตัวแรกแรกคือ 64 ตัวเลขที่สองคือ 36

    โดยสรุปแล้ว ระหว่าง httpd (Apache) และ mysqld (MySQL)

    ตอนเปิดเครื่อง mysqld(64) จะถูกเปิด (start) ขึ้นมาก่อน httpd(85)

    ตอนปิดเครื่อง httpd(15) จะถูกปิด (stop) ก่อน mysqld(36)

    หากต้องการยกเลิก หรือไม่ต้องการให้รันเซอร์วิสตอนบู๊ตเครื่องแล้ว ก็สามารถใช้คำสั่ง chkconfig ตามด้วยชื่อ และตามด้วยคำว่า off

    เช่น ไม่ต้องการให้ httpd และ mysqld รันขึ้นมาตอนบู๊ตเครื่อง

    [root@cent6 ~]# chkconfig httpd off [root@cent6 ~]# chkconfig mysqld off

    [root@cent6 ~]# chkconfig --list httpd httpd 0:off 1:off 2:off 3:off 4:off 5:off 6:off

    [root@cent6 ~]# chkconfig --list mysqld mysqld 0:off 1:off 2:off 3:off 4:off 5:off 6:off