โปรแกรมที่รันเป็นเซิร์ฟเวอร์ หรือโปรเซสควบคุมการทำงานของเครื่องบนลีนุกซ์ (นิยมเรียกโปรแกรมแบบนี้ว่า เซอร์วิส) ที่ติดตั้งจากไฟล์ 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
ข้อมูลอ้างอิง
- man service(8)
- การเปิดเซอร์วิสตอนบู๊ตเครื่องของ CentOS 6