歡迎來到Linux教程網
Linux教程網
Linux教程網
Linux教程網
您现在的位置: Linux教程網 >> UnixLinux >  >> Linux編程 >> SHELL編程

Linux shell編寫系統服務腳本

事先准備工作:源碼安裝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 /]#

Copyright © Linux教程網 All Rights Reserved