如何不耍流氓的做运维之-SHELL脚本
Posted 高效运维
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何不耍流氓的做运维之-SHELL脚本相关的知识,希望对你有一定的参考价值。
作者简介:
赵舜东
中国SaltStack用户组发起人,GOPS金牌讲师,金牌作者
江湖人称赵班长,曾负责武警某部指挥自动化架构和运维工作,2008年退役后一直从事互联网运维工作;曾带领团队负责国内某电商运维工作,UnixHot运维社区创始人、《SaltStack入门与实践》作者。
导读:大家都是文明人,尤其是做运维的,那叫一个斯文啊。怎么能耍流氓呢?赶紧看看,编写SHELL脚本如何能够不耍流氓。
下面的案例,我们以mysql数据库备份SHELL脚本的案例来进行阐述:
不记录日志的SHELL脚本就是耍流氓!
我们经常在工作中会遇到一个苦恼的事情,一个SHELL脚本到底干了什么,什么时候开始执行,什么时候结束的。尤其是数据库备份,我们想知道我们的MySQL数据库备份时间。所以给脚本加日志显尤为重要。那么我们的脚本应该有一个日志的函数,专门用于记录日志:得
上面的脚本我编写了一个日志函数shell_log,每次记录日志,我们直接执行shell_log把日志内容当作第一个参数传给它就可以了,赶紧试试。
[root@linux-node2 shell]# catshell_template.sh.log 2016-08-27 06-01-19 : shell_template.sh :shell beginning ,write log test 2016-08-27 06-01-19 : shell_template.sh :shell success ,write log test
直接就能执行的SHELL脚本很容易耍流氓?
一个脚本直接就能执行?难道不是直接就能执行吗?试想,你临时编写了一个特别重要的脚本,干的事情可能有破坏性,一不小心被别人./执行了怎么办呢?而且很多时候我们一个脚本的功能可能有多个,所以我们有必要让用户可以选择进行执行。
上面的脚本我们编写了shell_usage函数,用来告诉用户,这个脚本的使用方法。同时,我要强调一下,像编写SHEEL我们经常是面向过程的,建议以函数为单位,这样脚本非常的清晰可读。赶紧执行以下看看效果吧。
[root@linux-node2 shell]# ./shell_template.sh Usage: ./shell_template.sh {backup}
不加锁的SHELL脚本就是让别人耍流氓
你编写的脚本能多个人同时执行吗?如果不能,那么如果多个人一起执行会怎么样呢?想想是不是有点冒冷汗。所以,不要给我们的其它小伙伴留下陷阱。不过如果你公司就你一个运维,真的不用怕吗?试想如果是定时任务再运行这个脚本,上一次没有运行完毕,然后到时间又运行了?然后,然后,然后,后果好可怕。
我为脚本增加了两个函数shell_lock和shell_unlock非常简单,就是创建一个锁文件。然后再执行的时候先判断锁文件是否存在,如果存在说明有其它用户在执行,就退出。如果没有自己创建锁文件,开始执行,执行完毕删除锁文件。
好的,现在你可以赶紧再开一个窗口试试能不能执行这个脚本,或者到/tmp目录下看看是否创建了锁文件。请注意:如果已知的异常退出,一定也要删除这个锁文件。
让别人记住你的好!
对于一个功能脚本来说,貌似还少了点什么。对,就是注释!我们要说明白这个脚本是干啥的。或者以后你离职后,别人看到这个脚本之后,我擦,这么牛掰的脚本是谁写的呢?不要怕,写上你的大名。由于篇幅有限,就只截图一部分:
当然还有很多编写脚本的技巧,没法一一描述,不过如果能掌握上面的三种技巧,立马感觉编写的脚本有点高大上,有木有?
下载脚本模板
如果你觉得这些小技巧还比较有用,想下载下去自己用,怎么办呢。我已经放到运维社区中,请复制下面的链接打开即可。
https://www.unixhot.com/article/60
近期好文:
独乐乐不如众乐乐,拥抱 DevOps,做中国 DevOps 的领路人
没看过瘾?没关系!赵班长将在 GOPS 2017 北京站继续分享哦
GOPS 2017 北京站
2017.7.28-7.29
点击“阅读原文”,关注 728·GOPS2017 北京站
以上是关于如何不耍流氓的做运维之-SHELL脚本的主要内容,如果未能解决你的问题,请参考以下文章
Linux运维之道之ENGINEER1.4(shell脚本基础)
《跟老男孩学Linux运维之shell编程实战》-第一章 shell脚本初步入门
《跟老男孩学Linux运维之shell编程实战》-第五章 shell脚本的条件测试