วิธีการเปิด ปิด เซอร์วิสของ CentOS 6

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

สคริปต์ไฟล์นี้ เราเรียกว่า “System V init script” หรือเรียกย่อๆ ว่า “init script” ส่วนใหญ่แล้วจะเขียนด้วย Shell script อยู่ในไดเร็คทอรี /etc/rc.d/init.d/ (หรือ /etc/init.d/ เป็นลิ้งค์ไฟล์เชื่อมโยงกัน)

ถ้าเปรียบเทียบกับ Windows ก็เหมือนกับ Services ที่อยู่ใน Administrative Tools ของ Control Panel

ตัวอย่างบางส่วนของสคริปต์ไฟล์ ที่ใช้ควบคุม sshd (Secure Shell)

#!/bin/bash
#
# sshd          Start up the OpenSSH server daemon
#
# chkconfig: 2345 55 25
# description: SSH is a protocol for secure remote shell access. \
#              This service starts up the OpenSSH server daemon.
...
start()
{
        [ -x $SSHD ] || exit 5
        [ -f /etc/ssh/sshd_config ] || exit 6
...
        echo -n $"Starting $prog: "
        $SSHD $OPTIONS && success || failure
...
stop()
{
        echo -n $"Stopping $prog: "
        if [ -n "`pidfileofproc $SSHD`" ] ; then
            killproc $SSHD
        else
            failure $"Stopping $prog"
        fi
...

 

หากต้องการจะเปิด หรือปิด โปรแกรมหรือเซอร์วิส เราสามารถรันสคริปต์ไฟล์นี้ได้โดยตรง เช่นต้องการปิด (stop) เซอร์วิส sshd ก็รันสคริปต์แล้วตามด้วยออปชั่น stop

[root@cent6 ~]# /etc/rc.d/init.d/sshd stop
Stopping sshd:                                             [  OK  ]

หรือต้องการเปิด (start) เซอร์วิส sshd  ก็รันสคริปต์แล้วตามด้วยออปชั่น start

[root@cent6 ~]# /etc/rc.d/init.d/sshd start
Starting sshd:                                             [  OK  ]

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

ตัวอย่างถ้าคอนฟิกไฟล์ไม่ถูกต้อง สคริปต์จะฟ้องว่ารันไม่สำเร็จ

[root@cent6 ~]# service sshd start
Starting sshd: /etc/ssh/sshd_config: line 129: Bad configuration option: anner
/etc/ssh/sshd_config: terminating, 1 bad configuration options
                                                           [FAILED]

 

การใช้คำสั่ง service

แต่เพื่อความสะดวก เราสามารถใช้คำสั่ง service เพื่อช่วยในการรันสคริปต์ แทนการพิมพ์แบบรันไฟล์ได้  รูปแบบการใช้คำสั่ง service คือ

# service <SCRIPT> <COMMAND> [OPTIONS]

คำอธิบาย

  • <SCRIPT>   ชื่อสคริปต์ไฟล์ที่อยู่ภายใต้ /etc/rc.d/init.d/ ไม่ต้องระบุเป็น พาธเต็มเช่น ระบุแค่ sshd
  • <COMMAND>   ระบุคำสั่งที่ต้องการ เช่น เปิด (start) ปิด (stop)
  • [OPTIONS]   ออปชั่นอื่นๆ เพิ่มเติม โดยทั่วไปแล้วไม่ค่อยได้ใช้

ตัวอย่างเช่น หากต้องการปิด (stop) เซอร์วิส sshd ก็สามารถทำได้โดย

[root@cent6 ~]# service sshd stop
Stopping sshd:                                             [  OK  ]

หรือต้องการเปิด (start) เซอร์วิส sshd ก็สามารถทำได้โดย

[root@cent6 ~]# service sshd start
Starting sshd:                                             [  OK  ]

แต่ละเซอร์วิส จะมีคำสั่ง (COMMAND) ไม่เหมือนกัน แต่ส่วนใหญ่แล้วจะมีคำสั่งเหล่านี้

  • start – เปิดหรือรันเซอร์วิส
  • stop – ปิด หรือ หยุดการรันเซอร์วิส
  • status – ดูสถานะของเซอร์วิส
  • restart – ปิด แล้ว เปิด เซอร์วิสใหม่ โดยส่วนใหญ่จะเป็นการเรียกคำสั่ง stop แล้ว start อีกครั้ง คำสั่งนี้ อาจมีผลกระทบ ทำให้ผู้ใช้งานเซอร์วิสนี้อยู่ ใช้งานไม่ได้ชั่วคราว
  • reload – เริ่มรันเซอร์วิสใหม่ ด้วยการส่ง signal HUP ไปที่ตัวโปรแกรม นิยมใช้คำสั่งนี้ หลังจากแก้ไขคอนฟิกใหม่ เพราะจะกระทบกับผู้ใช้งานน้อยกว่าการใช้คำสั่ง restart มาก

หากต้องการตรวจสอบว่าเซอร์วิสที่จะรันมีคำสั่ง (COMMAND) อะไรให้ใช้บ้าง ให้พิมพ์คำสั่ง service แล้วตามด้วยชื่อสคริปต์โดยไม่ต้องระบบคำสั่ง เช่น

[root@cent6 ~]# service sshd
Usage: /etc/init.d/sshd {start|stop|restart|reload|force-reload|condrestart|try-restart|status}

ผลลัพธ์ที่ได้จากการใช้คำสั่ง service ของแต่ละเซอร์วิส อาจไม่เหมือนกัน

ตัวอย่างการใช้คำสั่ง service ตรวจสอบสถานะเซอร์วิส sshd ผลลัพธ์ที่ได้มีสถานะการรัน พร้อมบอก PID ของ sshd

[root@cent6 ~]# service sshd status
openssh-daemon (pid  1864) is running...

[root@cent6 ~]# ps -ef | grep 1864
root      1864     1  0 22:18 ?        00:00:00 /usr/sbin/sshd

แต่ถ้าใช้คำสั่ง service ตรวจสอบสถานะของเซอร์วิส iptables จะแสดงกฎ (rule) ที่เปิดใช้อยู่

[root@cent6 ~]# service iptables status
Table: filter
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           state RELATED,ESTABLISHED
2    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0
3    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0
4    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0           state NEW tcp dpt:22
5    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain FORWARD (policy ACCEPT)
num  target     prot opt source               destination
1    REJECT     all  --  0.0.0.0/0            0.0.0.0/0           reject-with icmp-host-prohibited

Chain OUTPUT (policy ACCEPT)
num  target     prot opt source               destination

ข้อมูลอ้างอิง

Leave a Reply

Your email address will not be published.