Linux手动启动、停止多个服务用的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--

时间: 2024-10-01 06:19:29

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

手动启动“远程过程调用”服务时,出现错误信息1058

有许多朋友在系统启动或者是运行一段时间后Remote Procedure Call (RPC)服务自动停止了,然后手动启动时无法启动,报的错误结果是:Could not start the Remote Procedure Call (RPC) Service.Error 1058:The service cannot be started, either because it is disabled or because it has no enabled devices associated

linux下监视进程挂掉后自动重启的shell脚本

本文介绍的这个shell脚本,通过一个while-do循环,用ps -ef|grep 检查loader进程是否正在运行,如果没有运行,则启动,确保崩溃挂掉的进程,及时自动重启. 脚本内容如下: #!/bin/sh while : do echo "Current DIR is " $PWD stillRunning=$(ps -ef |grep "$PWD/loader" |grep -v "grep") if [ "$stillRun

Linux下启动停止服务shell脚本

jenkins构建重新部署时脚本: #!/bin/bash app=auth jar_pid=`ps -ef|grep -v grep | grep 'java -jar e-$app-controller-1.0-SNAPSHOT.jar'|awk '{ print $2 }'` echo $jar_pid if [ ! -n "$jar_pid" ]; then echo 'will redeploy.' #rm -rf nohup.out nohup java -jar e-$a

Linux下启动停止查看杀死Tomcat进程

文章来自:http://www.linuxidc.com/Linux/2011-06/37180.htm 启动 一般是执行tomcat/bin/startup.sh,sh tomcat/bin/startup.sh 停止 一般是执行 sh tomcat/bin/shutdown.sh脚本命令 查看 执行ps -ef |grep tomcat 输出如下 sun 5144 1 0 10:21 pts/1 00:00:06 /java/jdk/bin/java -Djava.util.logging.

Linux下启动,停止,重启Nginx、Mysql、PHP

LINUX启动Nginx的命令: 一.查询是否启动 [[email protected] php-fpm.d]# ps -ef | grep nginx root 25225 1 0 19:26 ? 00:00:00 nginx: master process /app/nginx/sbin/nginx www 25229 25225 0 19:26 ? 00:00:00 nginx: worker process root 25247 19431 0 19:30 pts/0 00:00:00

Linux 启动、停止、重启tomcat工具(Shell脚本)

1.   启动 #!/bin/bash pids=`ps -ef | grep java | grep -w tomcat | awk '{print $2}'` #pids=`ps -ef | grep -w tomcat | grep -v "grep" | awk '{print $2}'` if test -z $pids then bash /root/soft/tomcat/bin/startup.sh echo -e "Start Finished!\n&quo

linux bash启动停止脚本,第二弹

本文是之前的watchdate的shell脚本的改进wdate,同样先上图: 1)脚本加入chkconfig管理  head -5 /etc/init.d/wdate #!/bin/bash #auth:[email protected] # #wdate         Start/Stop the watchdate daemon # # chkconfig: 2345 71 55 chkconfig --add wdate 2)开始贴代码 #!/bin/bash #auth:[email 

linux bash启动停止脚本,可以套用

先贴效果: #!/bin/bash #auth:[email protected] source /etc/init.d/functions #判断参数个数 [ $# -ne 1 ]&&{ echo "usage:$0 {start|stop|restart|status}" exit 1 } #分支 case $1 in start) nohup watch -n 1 date "+%H:%M:%S" &> /tmp/date &am

Linux运维之道之ENGINEER1.4(shell脚本基础)

ENGINEER1.4 SHELL脚本基础 认识shell环境 bash shell的使用方式 交互式: --人工干预,智能化程度高 --逐条解释执行,效率低 非交互式: --需要提前设计,智能化难度大: --批量执行,效率高: --方便在后台及悄悄地执行: 什么是shell脚本:提前设计可执行语句,用来完成特定任务的文件 --解释型程序 --顺序,批量执行 规范shell脚本的一般组成: #!环境声明 #注释文本 可执行代码 ----------------------------------