事先准備工作:源碼安裝apache 。安裝目錄為/usr/local/httpd
任務需求:
1、可通過 service httpd start|stop|status|restart 命令對服務進行控制
2、httpd服務可開機自啟動
思路:
1、start、stop操作可直接調用源碼安裝的httpd的控制程序apachectl
2、在啟動服務時,建立httpd.lock文件;停止服務時刪除
3、status操作檢測httpd.lock文件是否存在,存在判斷服務已啟動,不存在表示服務停止
4、對每個操作建立對應的函數,進行調用
5、restart操作先調用stop函數,在調用start函數
6、服務腳本的控制參數通過位置變量 $1 傳入,使用case分支進行識別、執行相應的操作
7、在腳本開頭添加chkconfig管理參數,定義哪個運行級別啟動、服務啟動優先級、服務關閉優先級(讓服務開機自啟動,必須添加),description服務描述,進程名
PS:看過系統已有系統服務腳本,發現那些比我寫的復雜多了。原諒我剛學shell,第一次寫系統服務腳本
腳本如下:
#vim /etc/init.d/httpd
#!bin/bash
#chkconfig:2345 55 25 //運行級別、啟動優先級、關閉優先級
#processname:httpd //進程名
#description:source httpd server daemon //服務描述
prog=/usr/local/httpd/bin/apachectl //控制程序路徑
lock=/usr/local/httpd/httpd.lock //lock文件路徑
start(){ //start函數
$prog start
echo "正在啟動服務...."
touch $lock
}
stop(){ //stop函數
$prog stop
echo "正在停止服務...."
rm -rf $lock
}
status(){ //status函數
if [ -e $lock ];then
echo "$0 服務正在運行"
else
echo "$0 服務已經停止"
fi
}
restart(){ //restart函數
stop
start //直接調用stop、start函數,
}
case "$1" in //case分支結構匹配,$1位置參數對控制參數調用
"start")
start //調用start函數
;;
"stop") //調用stop函數
stop
;;
"status") //調用status函數
status
;;
"restart") //調用restart函數
restart
;;
*) //其他參數就輸出腳本正確用法
echo "用法:$0 start|stop|status|restart"
;;
esac
驗證:
[root@ndbA /]# service httpd start
正在啟動服務....
[root@ndbA /]# service httpd status
/etc/init.d/httpd 服務正在運行
[root@ndbA /]# service httpd stop
正在停止服務....
[root@ndbA /]# service httpd status
/etc/init.d/httpd 服務已經停止
[root@ndbA /]# service httpd stop
httpd (no pid file) not running
正在停止服務....
[root@ndbA /]# service httpd restatus
用法:/etc/init.d/httpd start|stop|status|restart
[root@ndbA /]# service httpd restart
httpd (no pid file) not running
正在停止服務....
正在啟動服務....
[root@ndbA /]#
[root@ndbA /]# chkconfig --list httpd
httpd 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
[root@ndbA /]# chkconfig httpd off
[root@ndbA /]# chkconfig --list httpd
httpd 0:關閉 1:關閉 2:關閉 3:關閉 4:關閉 5:關閉 6:關閉
[root@ndbA /]# chkconfig httpd on
[root@ndbA /]# chkconfig --list httpd
httpd 0:關閉 1:關閉 2:啟用 3:啟用 4:啟用 5:啟用 6:關閉
[root@ndbA /]#