Linux手动启动、停止多个服务用的shell脚本

问题通用场景描述:测试服务器上的服务众多,为了避免过大的资源开销将原先的服务都设置为开机不启动,仅保留一些必要的系统服务,因此当需要使用哪些服务时需要手动开启。有的服务对其他服务可能存在依赖关系,例如服务A依赖服务B,服务B依赖服务C。此时可以用顺序执行的方式解决依赖问题,如果检查到依赖不满足,则退出执行。

编码思路:

(一)为什么使用函数?

1.当有重复代码或 当一个任务只需要很少的修改就被重复几次执行时, 这时你应考虑使用函数.

2.函数可以处理传递给它的参数并且能返回它的退出状态码(exit status)给脚本后续使用.

(二)函数参数如何传递的?

函数以位置来引用传递过来的参数(就好像他们是位置参数(positional parameters)), 例如$1,$2以此类推.

(三)如何处理依赖关系?

用顺序执行的方式解决依赖问题,如果检查到依赖不满足,则退出执行。

编码范例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#!/bin/bash
REQUIRED_SERVICE_1=mysql
REQUIRED_SERVICE_2=zabbix-server
REQUIRED_SERVICE_3=zabbix-agent
 
function help(){
    echo "Function: start\stop zabbix service and dependence, and check status"
    echo "Usage: $0 {start|stop|status|help}"
}
 
function check_service_if_is_running(){
    SERVICE=$1
    service $SERVICE status >/dev/null 2>&1
    REVAL=$?
    if [[ $REVAL -eq 0 ]]; then
        return 0
    else
        return 1
    fi
}
 
function start_service_if_is_stoped(){
    SERVICE=$1
    service $SERVICE start >/dev/null 2>&1
    check_service_if_is_running $SERVICE
    REVAL=$?
    if [[ $REVAL -eq 0 ]]; then
        echo $SERVICE is running...
    else
        echo $SERVICE is not running, error code is $REVAL.
        exit 1
    fi
}
 
function stop_service_if_is_running(){
    SERVICE=$1
    service $SERVICE stop >/dev/null 2>&1
    check_service_if_is_running $SERVICE
    REVAL=$?
    if [[ $REVAL -eq 1 ]]; then
        echo $SERVICE is stoped...
    fi
}
 
function status_service(){
    SERVICE=$1
    check_service_if_is_running $SERVICE
    REVAL=$?
    if [[ $REVAL -eq 0 ]]; then
        echo $SERVICE is running...
    else
        echo $SERVICE is not running, error code is $REVAL.
        exit 1
    fi
}
 
function start(){
    start_service_if_is_stoped $REQUIRED_SERVICE_1
    start_service_if_is_stoped $REQUIRED_SERVICE_2
    start_service_if_is_stoped $REQUIRED_SERVICE_3
}
 
function stop(){
    stop_service_if_is_running $REQUIRED_SERVICE_3
    stop_service_if_is_running $REQUIRED_SERVICE_2
    stop_service_if_is_running $REQUIRED_SERVICE_1
}
 
function status(){
    status_service $REQUIRED_SERVICE_1
    status_service $REQUIRED_SERVICE_2
    status_service $REQUIRED_SERVICE_3
}
 
case "$1" in 
    start)
        start
    ;;
    stop)
        stop
    ;;
    status)
        status
    ;;
    *)
        help
        exit 1
    ;;
esac

编码测试:

Linux手动启动、停止多个服务用的shell脚本

--END--



本文转自 urey_pp 51CTO博客,原文链接:http://blog.51cto.com/dgd2010/1617846,如需转载请自行联系原作者


上一篇:VS2010安装项目程序打包操作详解


下一篇:使用BigDecimal进行精确运算