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