shell(十)case的几个典型应用
发布日期:2021-05-08 04:29:49 浏览次数:9 分类:精选文章

本文共 3921 字,大约阅读时间需要 13 分钟。

一   说明

 case语句专门写服务的启动脚本

二    案例

多种方式:RHEL7的systemed的管理方式和RHEL6的/etc/init.d的管理方式

说明:这里仅仅是为了通过相关的练习来掌握case的用法

注意:对于既没有通过systemd管理的,并且也没有提供可以放到/etc/init.d/下的启动脚本,就需要自己手动完成了!

(1)开发nginx的启动脚本并加入开机自启的脚本

需求:通过case脚本模拟nginx服务启动关闭/etc/init.d/nginx    {start|stop|reopen|reload}
#!/bin/bash# 开机启动顺序# ll /etc/rc.d/rc3.d/|grep 22 -->22可以(数字越靠前,优先级越高)-->开机和关闭的顺序# chkconfig: 2345 32 62# description: Nginx is a http server!# 思路:定义三个模块(函数),然后case语句调用模块,实现相应的功能!#(1)判断shell自带的库函数是否存在-->有则加载[ -f /etc/init.d/functions ] && source /etc/init.d/functions#(2)判断进程是否开启(nginx是否开启)-->pid文件-->里面有进程号或者端口(不靠谱)pid_file=/usr/local/lnmp/nginx/logs/nginx.pid#(3)定义函数-->模块#(1)开启服务Start_Nginx(){	#(1)判断pid是否存在,存在则说明服务运行  if [ -f $pid_file ];then	echo "Nginx is running."  else	#(2)否则启动nginx  /usr/local/lnmp/nginx/sbin/nginx &> /dev/null  action "Nginx is starting."     /bin/true  fi}#(2)关闭服务Stop_Nginx(){  #(1)判断pid是否存在-->存在则关闭  if [ -f $pid_file ];then        /usr/local/lnmp/nginx/sbin/nginx -s stop &> /dev/null        action "Nginx is stopped."     /bin/true    else  #(2)不存在,否则表明已经关闭  	action "Nginx is stopped."     /bin/true  fi	}#(3)重启服务Restart_Nginx(){  	#(1)判断pid是否存在-->只有pid存在(服务开启)才会重新加载  if [ -f $pid_file ];then       /usr/local/lnmp/nginx/sbin/nginx -s reopen &> /dev/null       action "Nginx is restarted."     /bin/true    else	#(2)提示用户	echo "Can't Open $pid_file"  fi}#(4)重新加载服务Reload_Nginx(){        #(1)判断pid是否存在-->只有pid存在(服务开启)才会重新加载  if [ -f $pid_file ];then       /usr/local/lnmp/nginx/sbin/nginx -s reload &> /dev/null       action "Nginx is reload."     /bin/true    else        #(2)提示用户服务本身没有开启        echo "Can't Open $pid_file"  fi}##############case语句###################case $1 in	start)	Start_Nginx	RETVAL=$?	;;	stop)	Stop_Nginx	RETVAL=$?	;;	restart)	# 另外一中方法-->先stop,然后再start-->这里用了系统脚本自带的	Restart_Nginx	RETVAL=$?	;;	reload)	Reload_Nginx	RETVAL=$?	;;	*)	# 错误提示	echo "USAGE:$0 {start|stop|restart|reload}"	exit 1esacexit $RETVAL

开机启动

chmod a+x /etc/init.d/nginx   [root@server1 init.d]# ll /etc/rc.d/rc3.d/total 0lrwxrwxrwx. 1 root root 20 Aug 14 18:56 K50netconsole -> ../init.d/netconsolelrwxrwxrwx. 1 root root 17 Aug 14 18:56 S10network -> ../init.d/networklrwxrwxrwx  1 root root 15 Sep  2 18:57 S32nginx -> ../init.d/nginxlrwxrwxrwx. 1 root root 15 Aug 14 18:56 S97rhnsd -> ../init.d/rhnsd# 开启和关闭对应的数字没有被占用即可!chkconfig --add nginxchkconfig --list nginx# 开机自启动chkconfig nginx on# reboot --->测试!# 不用vim /etc/rc.d/rc.local 的方式编辑的方式!

后续

#(1)小细节把/usr/local/lnmp/nginx/sbin/nginx命令作为一个变量存储,然后下面引用#(2) 把冗余的封装成一个函数-->某个名称执行是否成功wzj(){    if [ $RETVAL - eq 0 ];then          action "Nginx is $1"     /bin/true    else         action  "Nginx is't $1"     /bin/false    fi}# 调用方式--->传递参数wzj $1

关于

# 7个运行级别对应的启动脚本! --> /etc/目录下drwxr-xr-x. 2 root root  77 Sep  2 18:55 rc0.ddrwxr-xr-x. 2 root root  77 Sep  2 18:55 rc1.ddrwxr-xr-x. 2 root root  77 Sep  2 18:57 rc2.ddrwxr-xr-x. 2 root root  77 Sep  2 18:57 rc3.ddrwxr-xr-x. 2 root root  77 Sep  2 18:57 rc4.ddrwxr-xr-x. 2 root root  77 Sep  2 18:57 rc5.ddrwxr-xr-x. 2 root root  77 Sep  2 18:55 rc6.d# 含义等级0表示:表示关机等级1表示:单用户模式等级2表示:无网络连接的多用户命令行模式等级3表示:有网络连接的多用户命令行模式等级4表示:不可用等级5表示:带图形界面的多用户模式等级6表示:重新启动

运行级文件

# 每个被chkconfig管理的服务需要在对应的init.d下的脚本加上两行或者更多行的注释# chkconfig: 2345 32 62# description: Nginx is a http server!(1)第一行告诉chkconfig缺省启动的运行级以及启动和停止的优先级,如果某服务缺省不在任何运行级启动,那么使用 – 代替运行级。(2)第二行对服务进行描述,可以用\ 跨行注释# 数字越靠前,关闭越靠前!############################################ 验证:如何下次开机确定是再32开启和62关闭# 本质创建连接文件[root@server1 init.d]# ll /etc/rc3.d/ |grep 32lrwxrwxrwx  1 root root 15 Sep  2 18:57 S32nginx -> ../init.d/nginx  #Start

常用的命令

chkconfig --del nginxchkconfig --list nginx        # 查看此服务的选项chkconfig --add nginx         # 加入开机管理中chkconfig nginx off           # 开机不自启ll /etc/rc3.d/ | grep nginx   # 查看优先级,以及是否创建对应的软链接chkconfig nginx on            # 开机自启

(2)mysql

要求:用函数、if语句、case语句实现mysql单实例或多实例启动关闭脚本的编写!

(3)rsync--->有时间没有

系统脚本的研习:/etc/init.d/network

#(1)用双引号case "$1" in#(2)用命令回传码rc=$?

上一篇:shell编程(十二)while循环
下一篇:shell编程(十一)case条件语句

发表评论

最新留言

路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月13日 20时01分00秒