
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=$?
发表评论
最新留言
路过,博主的博客真漂亮。。
[***.116.15.85]2025年04月13日 20时01分00秒
关于作者

喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
Java8新特性——并行流与顺序流
2021-05-08
阿里云大数据ACP(四)机器学习 PAI
2021-05-08
如何通过 Dataphin 构建数据中台新增100万用户?
2021-05-08
C语言的数值溢出问题(上)
2021-05-08
BottomNavigationView控件item多于3个时文字不显示
2021-05-08
函数指针的典型应用-计算函数的定积分(矩形法思想)
2021-05-08
8051单片机(STC89C52)八个LED灯闪烁
2021-05-08
8051单片机(STC89C52)以定时器中断模式实现两倒计时器异步计时
2021-05-08
ament: command not found ROS2
2021-05-08
双变量的t检验
2021-05-08
用 wxPython 打印你的 App
2021-05-08
wxPython:引用、展示图片、Stock IDs、操作剪切板、拖拽
2021-05-08
android GPS JAVA 获取GPS功能是否禁用
2021-05-08
vue项目通过vue.config.js配置文件进行proxy反向代理跨域
2021-05-08
Linux下安装MySql过程
2021-05-08
原生vue实现VantUI中IndexBar索引导航栏功能
2021-05-08
android:使用audiotrack 类播放wav文件
2021-05-08
vue通过better-scroll 封装自定义的下拉刷新组件
2021-05-08
android解决:使用多线程和Handler同步更新UI
2021-05-08