編寫腳本以前有幾個東西要知道:vim
如今用的包的安裝是靠rpm來裝的,rpm裝的時候全部東西都作好了,包括腳本都已經給定了,直接用就好了。可是咱們還應該清楚一點,在實際的工做中,爲了用到更新的軟件更新的功能,必須靠源代碼來實現。源代碼安裝的好處是能夠利用最新的版本,最新的功能。可是,它最很差的地方在於不少東西都須要本身動手,好比控制腳本都要本身來完成,通常沒有提供。沒有這些腳本是不能用service命令來控制服務的。一旦有了腳本管理服務就很容易了。bash
一、服務安裝完以後會造成一個可執行文件,這個可執行文件在/usr/sbin目錄下(額外安裝的服務的可執行程序都會放在這個目錄下)測試
二、一個服務一旦執行以後,將會造成一個鎖文件。這個鎖文件在/var/lock/subsys/目錄下。基於這個鎖能夠作一些判斷,若是鎖存在說明服務正在運行,若是所不存在說明服務沒有在運行。rest
三、httpd服務啓動時的pid文件在/var/run/httpd.pid中保存着。blog
四、pkill在針對Apache來處理沒有問題,但針對一些其餘服務進程來處理的時候,這種方式可能處理不了。比較經常使用、可靠的一種方式是:killproc進程
接下來演示一個httpd的控制腳本。it
[root@localhost ~]# vim http2.sh
#!/bin/bash
prog=/usr/sbin/httpd
lockfile=/var/lock/subsys/httpd
pidfile=/var/run/httpd.pid
. /etc/init.d/functionsio
start() {
if [ -e $lockfile ];then
echo "the program `basename $prog` is started....."
else
echo -e -n "the program `basename $prog` is starting....."
sleep 2
$prog && echo "[ OK ]" && touch $lockfile || echo "fail"
fi
}function
stop() {
if [ -e $lockfile ];then
echo -e -n "the program `basename $prog` is stopping...."
sleep 2
killproc `basename $prog` && rm -rf $lockfile && echo "[ OK ]" || echo "fail"
else
echo -e "the program `basename $prog` is stopped"
fi
}軟件
status() {
if [ -e $pidfile ];then
echo "the program `basename $prog` `cat $pidfile` is running"
else
echo -e "the program `basename $prog` is stopped"
fi
}
case "$1" in
start)
start
;;
stop)
stop
;;
status)
status
;;
restart)
stop
start
;;
*)
echo "USAGE:start|stop|satus|restart"
esac
測試狀況以下: