码迷,mamicode.com
首页 > 系统相关 > 详细

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

时间:2015-03-06 17:28:13      阅读:257      评论:0      收藏:0      [点我收藏+]

标签:linux shell编程   shell 函数   shell 函数参数传递   处理依赖关系   shell 函数返回值   

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

编码思路:

(一)为什么使用函数?

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

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

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

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

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

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

编码范例:

#!/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

编码测试:

技术分享

--END--

本文出自 “通信,我的最爱” 博客,请务必保留此出处http://dgd2010.blog.51cto.com/1539422/1617846

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

标签:linux shell编程   shell 函数   shell 函数参数传递   处理依赖关系   shell 函数返回值   

原文地址:http://dgd2010.blog.51cto.com/1539422/1617846

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!