shell编程之服务脚本编写,文件锁以及信号捕获
shell脚本编程是linux运维工程师必备的技能,也是非常重要的一个技能,所以把shell编程学好,只有好处。基础语法我也就不讲了,学过C语言这些语言的,稍微看一下就能明白shell编程的基础,所以我们直接切入正题。
开班第20天:
今天的课程大纲:
shell编程中的函数
编写一个自动挂载的脚本
利用autofs怎么实现自动挂载
文件锁和信号捕获trap
sed流文件编辑器
详细讲解:
shell编程中的函数
shell中,我们定义函数的方法有两种:
下面调用的时候,直接调用函数名就可以了
这里需要注意的就是shell中函数的返回值,它跟其他编程语言不一样,它的返回值return是返回函数的退出状态码。执行成功为0,不成功为非0.
编写一个自动挂载的脚本
编写服务脚本,一般的步骤是:
1.有执行权限(chmod +x /....)
2.支持start,stop...
3.开机启动
接下在我们编写一个自动挂载的服务脚本,跟据上面所说的步骤,
1.我们可以先写出真个脚本的主体:3.4行是代表我这个服务脚本可以开机启动,5行代表我要使用/etc/init.d/functions这个函数库,下面的success和failure都是来自这个函数库的。
2.编写start()函数,mountpoint是检测/boss这个文件夹是否为一个挂载点,如果是挂在点,那么我启动就失败,也就是本身已经在挂载,如果不是挂载点,那么我正常启动,然后挂载ip文件。stop函数跟start函数类似。
3.编写status()函数
4.测试启动,把编写的脚本移动到/etc/init.d/明明为bossnfs
利用autofs怎么实现自动挂载
这里的自动挂载,跟我们之前学的添加到/etc/fstab不一样,他是当你访问某一个目录的时候,我们的共享就会挂在这个访问的目录,即使这个目录是不存在的。这里我们可以使用autofs来实现自动挂载,安装起服务,yum install autofs,service autofs restart。这里有两个需求,第一是访问/mnt/boss这个目录的时候,自动挂载172.16.65.128:/share到这个boss目录。第二个是访问/boss目录的时候,自动自动挂载172.16.65.128:/share到这个boss目录。
需求1.修改配置文件,vim /etc/auto.master,添加/mnt这个目录
编写/etc/auto.mnt这个文件:
需求2:修改配置文件,vim /etc/auto.master,添加/boss到这个目录,这里需要注意的,根目录要用/-表示
编写/etc/auto.root文件:这里需要注意的是boss这个目录是在根目录下的,所以要用绝对路径。
测试:成功挂载
文件锁和信号捕获trap
1.什么是文件锁,文件锁就是我们在运行一个服务的时候,另一个终端是不能同时运行的,这就是文件锁的功能,那么我们写一个简单的脚本测试一下文件锁的功能:
测试,我在一个终端运行的时候,另一个终端也开始运行这个脚本,但是错误了,提示:
2.信号捕获,我们在上面的脚本执行的时候,按下ctrl+c,运行终止,但是锁文件没有被删除,一直存在,所以下次运行这个脚本的时候,是无法运行的,除非我们手动删除这个锁文件,所以我们要捕获ctrl+c这个信号,然后通过捕获这个信号之后,执行某一定的操作,使得我们的锁文件不至于一直存在。
需求1:使得上述服务脚本在执行的过程中,不能按ctrl+c,我把脚本的最后改成下面:代表我trap了2信号,""里面什么也没有,表示捕获信号之后什么也不做,在删除了$FLOCK锁文件之后,我们再释放2信号。
需求2:我们在脚本运行过程中允许按ctrl+c,但是按了之后,这个脚本必须自动删除锁文件,那么下次运行的时候就不会提示锁文件存在,无法运行,这里我们只需要修改掉捕获信号2之后,删除锁文件然后退出即可。
sed流文件编辑器
sed称为流文件编辑器或者非交互编辑器,sed适合在脚本中编辑文件,因为vim无法在脚本中使用。sed主要的用法有增删改查,这个大家可以看一下man手册,还有就是多多练习。明天我会提供一个sed的文件,把sed基本上所有的用法都会概括一下。希望大家关注一下!
总结:
今天主要讲了在shell脚本编程中我们以后会经常接触的,服务脚本的编写,其实学这个懂得编写一个,其他的都是画饼,另外还讲解了sed流文件编辑器,因为在脚本中,我们无法使用vim来进行对配置文件修改的。
转自:
《第20天》shell编程之服务脚本编写,文件锁以及信号捕获 - 今日头条(TouTiao.com)
http://toutiao.com/a6321640633670009090/
shell编程之服务脚本编写,文件锁以及信号捕获的更多相关文章
- (转)shell实现多级菜单脚本编写
shell实现多级菜单脚本编写 原文:https://www.yuanmas.com/info/2gOwBPvqyb.html 这篇文章主要介绍了Shell实现多级菜单系统安装脚本实例分享,本文脚本用 ...
- shell编程系列1--shell脚本中的变量替换
shell编程系列1--shell脚本中的变量替换 变量替换总结: .${变量#匹配规则} # 从头开始匹配,最短删除 .${变量##匹配规则} # 从头开始匹配,最长删除(贪婪模式) .${变量%匹 ...
- 小鸟初学Shell编程(二)编写简单的Shell脚本
Shell脚本 编写Python.PHP脚本通常需要掌握语言的函数,那么Shell脚本则不需要,只需要掌握Linux命令就可以编写Shell脚本,因为Shell脚本就是由多个Linux命令组成,通过将 ...
- nginx 服务脚本编写模板
编写nginx服务脚本:脚本内容如下: [root@www ~]# cat /etc/init.d/nginx #!/bin/bash # nginx Startup script for the N ...
- Linux - 简明Shell编程11 - 调用脚本(CallTheScript)
脚本地址 https://github.com/anliven/L-Shell/tree/master/Shell-Basics 示例脚本及注释 主脚本: CallTheScript.sh #!/bi ...
- shell启停服务脚本模板
一. 启动脚本模板:符合幂等性 如果该服务已经启动,再次调用该脚本,不会报错,也就是说可以反复多次调用,另外启动成功返回 一个参数,提供给自动发布平台校验该服务是否启动 #!/bin/bash ins ...
- Shell编程—图形化脚本
1创建文本菜单 1.1普通的文本菜单 $ cat menu1 #!/bin/bash # simple script menu function diskspace { clear df -k } f ...
- linux服务脚本编写
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 3 ...
- shell编程:利用脚本实现nginx的守护自动重启
nginx_daemon.sh #!/bin/bash # this_pid=$$ while true do ps -ef | grep nginx | grep -v grep | grep -v ...
随机推荐
- 2014最热门、最具争议的10个Java话题
Java 的哪些内容已在2014年死去,Java 的哪些变更又遭到整个Java社区的竭力反对?请随我们一起来回顾在2014年这个多事之秋中Java都发生了哪些变化,以及小伙伴们都在JAXenter热烈 ...
- [转]修改python默认的编码方式
今天碰到了 python 编码问题, 报错信息如下Traceback (most recent call last): File "ntpath.pyc", line 108, ...
- linux搭建apache服务并修改默认路径
该篇文章主要讲解如何在linux服务器上搭建apache服务器,并修改指定的apache路径到自定义路径下 一:检查服务器上是否已安装apache,停止并卸载系统自带apache服务 命令为:rpm ...
- 1-jQuery - AJAX load() 方法【基础篇】
jQuery load() 方法是简单但强大的 AJAX 方法:load() 方法从服务器加载数据,并把返回的数据放入被选元素中. 格式 $(selector).load(URL 源码 index.h ...
- mybatis 查询语句(按条件查询)
<select id="getAllDitch" parameterType="xxx.xx.entity.CheckDitch" resultType= ...
- DD应用实例
1.将本地的/dev/hdb整盘备份到/dev/hdd dd if=/dev/hdb of=/dev/hdd2.将/dev/hdb全盘数据备份到指定路径的image文件dd if=/dev/hdb o ...
- Llinux环境下编译并使用OpenCV
http://docs.opencv.org/2.4/doc/tutorials/introduction/linux_install/linux_install.html http://stacko ...
- 让人头疼的CSS兼容
先说点Hack的知识(真正的高手是不用Hack的,但要成为高手必须通过Hack这一关) /* CSS属性级Hack */ color:red; /* 所有浏览器可识别*/ _color:red; /* ...
- __doPostBack初识
周五在公司看到有看到Request.Params["__EVENTARGUMENT"]的代码不解,不解遂上网查找,发现一篇文章<Understanding the JavaS ...
- 关于UIFont和计算字符串的高度和宽度
转自:http://i.cnblogs.com/EditPosts.aspx?opt=1 1.创建方法:+ fontWithName:size:- fontWithSize:2.创建系统字体:+ sy ...