Shell脚本
文章平均质量分 70
最爱喝酸奶
一直要努力!
展开
-
查看系统运行情况
查看系统运行情况脚本:#!/bin/bash#用于查看系统运行情况#功能选择菜单menu(){ echo -e "\033[31;32m 查看系统运行情况 \033[0m" echo -e "\033[31;32m===========...原创 2019-05-27 15:28:04 · 1014 阅读 · 0 评论 -
LAMP环境一键部署
#!/bin/bash#用于安装LAMP环境VHOST_COM=lzxlinux.com #虚拟主机域名[ ! -d /software/ ] && mkdir /software#功能选择菜单menu(){ echo -e "\033[31;32m LAMP编译安装脚本 ...原创 2019-05-24 23:31:00 · 1313 阅读 · 5 评论 -
LNMP环境一键部署
#!/bin/bash#用于安装LNMP环境[ ! -d /software/ ] && mkdir /software#功能选择菜单menu(){ echo echo -e "\033[31;32m LNMP编译安装脚本 ...原创 2019-05-24 23:30:37 · 1376 阅读 · 1 评论 -
批量实现SSH免密登录
运用ansible进行自动化运维之前,我们需要对所有机器进行SSH认证,运用下面脚本一键实现机器批量SSH免密登录,务必保证批量机器为同一用户同一密码。#!/bin/bash#批量实现SSH免密登录#没有则安装expectif ! rpm -q expect > /dev/nullthen echo "###expect 未安装,现在安装###" yum ins...原创 2019-04-10 14:46:34 · 2399 阅读 · 0 评论 -
20. 监控CDN节点
CDN可以提升用户对网站访问的体验,一般情况下,比较大的公司会在全国各个城市甚至国外部署CDN节点,这样用户可以就近选择访问的节点,可以快速访问且节省带宽。但CDN节点一多就容易出现某个节点有问题的情况,本案例的需求是监控各个CDN节点,看其是否正常。具体要求如下:1)提供一个所有CDN节点IP的文本 /data/cdn_ip.list ;2)提供一个监控链接地址:http://www.l...转载 2019-02-11 10:49:29 · 2667 阅读 · 0 评论 -
19. 一键安装配置samba服务
samba通常用于局域网内,提供不同计算机之间文件及打印机等资源的共享服务。本案例实现一键安装并配置samba服务。具体要求如下:1)执行脚本时需要带一个参数,为共享的目录,目录不存在就自动创建;2)任何人都可以访问且不用密码,并且目录只读。参考脚本如下:#!/bin/bash#一键安装配置samba服务if [ "$#" -ne 1 ]then echo "运行脚本...转载 2019-02-11 10:48:24 · 1655 阅读 · 0 评论 -
18. 管理docker
docker我们并不陌生,与传统的虚拟技术相比十分轻便。本案例通过shell脚本一键管理docker容器,进行启动/关闭/删除容器等操作。具体要求如下:1)脚本支持启动全部容器、关闭全部容器、删除全部容器;2)需要提示用户如何使用该脚本,需给出范例。参考脚本如下:#!/bin/bash#用于管理docker容器while turedo read -p "请输入你要执行...转载 2019-02-09 20:58:49 · 290 阅读 · 0 评论 -
17. 自动化运维——代码上线
之前已经使用过expect脚本,可以远程登录机器并执行命令,其实expect脚本也可以传输文件。本案例的需求就是通过expect脚本来同步文件,从而实现代码上线。生产环境中一个业务通常跑在多台服务器上,也就是所谓的负载均衡,那么这些机器上运行的代码必须要保持一致。如何保持一致呢?有两种方案。1.共享式如果机器不多,可以使用NFS实现,如果要求稳定性最好是使用专业的存储设备(NAS、SAN等)...转载 2019-02-08 16:00:15 · 1146 阅读 · 0 评论 -
16. 分析Tomcat日志
如果你公司服务器上跑的是java的代码,那多半会使用tomcat,而tomcat出现问题我们就需要去查看tomcat的日志。tomcat有一个日志叫做catalina.out,它记录了tomcat相关的信息,包括正确的和错误的。该案例的需求背景是这样的:服务器上跑着4个tomcat实例,目录结构如下:/opt/TOMCAT/crontabs/opt/TOMCAT/t1/opt/TOMCAT...转载 2019-02-05 18:23:25 · 1055 阅读 · 0 评论 -
15. 监控磁盘IO使用率
计算机有三大件:CPU、内存和磁盘,这三者中往往是磁盘会“拖后腿”。在生产环境,作为数据库角色的服务器磁盘建议拿4块硬盘做磁盘阵列RAID10,这样既保证数据读写速度也保证数据的安全。本案例要求写一个监控磁盘IO使用率的脚本,实时查看IO使用情况,防止因为磁盘IO效率低而导致MySQL查询慢的问题。具体要求如下:1)磁盘IO使用超过90就记录日志并邮件告警;2)假设记录日志的目录是 /d...转载 2019-02-03 21:20:48 · 5217 阅读 · 0 评论 -
14. 日志归档
在Linux系统中有日志切割的工具logrotate ,它可以按照我们的要求按时间或者按大小来切割和归档老的日志,它还可以压缩切割后的日志,也可以定义老日志保留的时间。本案例的需求是通过一个shell脚本来实现类似logrotate的功能。具体要求如下:1)要处理的日志路径是 /data/logs/1.log ;2)每天0点0分切割日志;3)老日志保留一周;4)归档后的日志名字为 ...转载 2019-02-02 18:58:46 · 1784 阅读 · 0 评论 -
13. 自动化运维——批量关闭tomcat服务
生产环境中往往在多台机器上运行同一个服务(tomcat),本案例的需求是批量关闭这多台机器上的tomcat服务。假设以下场景:1)提供一个机器IP和tomcat用户的密码列表(/data/ip-passwd.txt),格式如下:10.111.22.101 passwd1 10.111.22.102 passwd2 10.111.22.103 passwd3 ...2)t...转载 2019-02-01 10:07:47 · 966 阅读 · 0 评论 -
12. 为LAMP的网站增加项目
一台运行LAMP环境的服务器,上面有几十个网站,每一个网站都分配了单独的虚拟主机和MySQL库。目前网站的数量还在持续增加,每增加一个网站需要做的操作如下:1)新增一个Apache虚拟主机;2)新增一个ftp账号对该网站目录有管理权限;3)新增一个库;4)新增一个数据库用户管理新增的库。由于这些操作具有非常高的重复度,所以适合用shell脚本实现。参考脚本如下:#!/bin/bash...转载 2019-01-30 14:42:14 · 269 阅读 · 0 评论 -
11. shell多线程备份数据库
也许你会有疑问,shell这么简单的脚本语言有多线程一说吗?答案是有的,只不过它实现起来有些难理解罢了,因为它借助了命名管道实现。所谓多线程就是将原来由一个进程完成的事情现在由多个线程去完成。假如一个进程需要10个小时完成的事情,现在分配给10个线程,给它们分工,然后同时去做这件事情,最终可能就需要1个小时。本案例就是实现shell多线程备份数据库,具体要求如下:1)公司的业务量比较大,有10...转载 2019-01-29 17:42:30 · 403 阅读 · 0 评论 -
10. 检测域名是否到期
任何网站对外提供服务,都需要有一个域名,就像每个人都有人名,网站的名字就是这个域名。如果你想做一个网站,首先就需要租借一个域名。当我们管理的域名数量非常多的时候,就很容易忘记为这些域名续期从而导致过期并回收。本案例的需求是监控指定的域名是否到期。具体要求如下:1)写一个函数,域名以参数的形式传递给这个函数;2)域名到期前的一周和到期后的一周(两周),每天发送一封告警邮件;3)脚本每天...原创 2019-01-29 10:23:57 · 1914 阅读 · 0 评论 -
9. 启动、关闭tomcat
在生产环境下,经常会遇到tomcat无法彻底关闭,也就是用tomcat自带的shutdown.sh脚本无法将java进程完全关掉。所以需要借助shell脚本,将进程杀死,然后再启动。本案例就要写一个脚本来实现上述功能。另外,彻底杀死一个进程的命令是 kill -9 pid。具体要求如下:1)不仅要彻底关闭java进程,还要成功启动tomcat服务;2)kill -9 杀进程比较危险,有可能...转载 2019-01-26 15:19:00 · 1353 阅读 · 0 评论 -
8. 傻瓜运维工具
做运维时,很多时候需要重复地使用一些命令来获取系统的状态信息,这些事情很可能是周而复始,除非是有特殊的要求需要特殊对待。因为这个特点,本案例可以写一个傻瓜运维工具,通过运行这个脚本工具来查看想要的信息。具体要求如下:1)当执行脚本时,首先会打印出系统的几个状态值:系统时间、负载、CPU使用情况、内存使用情况、磁盘使用情况、网卡流量(5s内均值,需列出所有网卡);2)然后会列出一个命令列表,...转载 2019-01-25 16:42:24 · 567 阅读 · 0 评论 -
7. 监控MySQL主从状态
在生产环境里,常见的MySQL架构使用最多的就是主从了,所以对于主从是否同步数据的监控尤为重要。如果使用了专业的监控软件(如zabbix)监控MySQL,那么选择监控工具提供的模板或插件去监控非常方便,但如果涉及到一些特殊要求就另当别论了。当然还可以写shell脚本来实现定制化的需求,本案例需要写一个shell脚本来监控MySQL主从。具体要求如下:1)每分钟检测一次,本次执行脚本时要检测上一...转载 2019-01-21 15:43:20 · 1863 阅读 · 0 评论 -
6. 检测两台机器上文件的差异
生产环境下,web服务器大多会做负载均衡,所以有多台机器上跑着同样的web程序代码。如果严格按照规范流程上线,即不人为特意更改代码,那么这多台机器上的代码一定是一样的,并不会存在两台机器同一个文件内容不同的情况。本案例的需求就是要检查两台机器同一个文件的差异,毕竟我们不确定服务器上的代码是否有人为改动过。具体要求如下:1)两台机器A和B,检查目标目录为 /data/wwwroot/www.ab...转载 2019-01-18 16:41:00 · 1013 阅读 · 0 评论 -
5. 监控磁盘使用率
虽然对于磁盘的监控属于最基础的监控,但是很多时候往往因为疏忽而忽略监控磁盘,最终导致事故发生,磁盘监控还是需要重视起来。本案例就是要监控磁盘使用率。具体要求如下:1)每分钟检测一次磁盘状况;2)当磁盘空间使用率或inode使用率高于90%,需要发邮件告警,假设收件邮箱为admin@admin.com ;3)统计使用率超过90%的分区所有子目录的大小,并把排名前3的子目录写到邮件内容中发...转载 2019-01-15 16:26:33 · 2055 阅读 · 0 评论 -
4. 自动封IP和解IP
对于web服务器来说,出现最普遍的问题就是网站访问慢甚至访问不到,到服务器上查看后得出的结论是,这个网站被CC攻击了。什么是CC攻击?CC攻击属于DDos攻击的一种,攻击者会利用大量被劫持的“肉鸡”对攻击目标网站发起请求,并且频率很快,这样会导致目标网站的服务器承受不住请求压力而瘫痪。CC攻击虽然看起来跟正常的访问没有什么区别,但如果我们仔细分析访问日志还是可以找到一些线索,比如某个IP访问频次...转载 2019-01-12 23:08:21 · 1768 阅读 · 0 评论 -
两集合比较判断
在生产环境下,有时我们会使用脚本来进行包的更新。这就涉及到一个问题:假如同时更新几十上百个包,我们要使用脚本中某个指定参数来完成,偶尔犯错就有可能将更新包遗漏一两个。因此,我们需要进行判断,提示遗漏的包,只要包有所遗漏就不进行更新,所有包齐全才会进行更新。具体需求如下:1)脚本名为update,指定参数为client;2)更新包所在目录为 /data ;3)更新包分别是agent-cl...原创 2019-01-11 22:20:45 · 315 阅读 · 0 评论 -
3. 批量添加多个用户
批量创建多个用户的需求在生产环境下用的不多,但是经常会在面试时的笔试题上看到,本案例就是批量创建多个用户。具体要求如下:1)批量创建100个用户;2)用户名为user_01 - user_100;3)给所有用户都设定一个随机密码,12位长度,且需要包含大小写字母及数字;4)并把用户的密码保存到 /data/user_passwd 文件中;5)这100个用户同属于users组。...转载 2019-01-09 22:54:50 · 3793 阅读 · 0 评论 -
2. 监控nginx服务器502状态码
相信运维过Nginx+php-fpm+MySQL网站的朋友一定遇到502问题,发生502问题的原因有很多种,而最常见的是由于php-fpm资源耗完导致。而本案例要监控这台服务器就是这种情况,平时一直都很好,但若网站访问量很高,就会有502的状态码出现。发生502的问题时,需要及时分析php-fpm资源耗尽的原因,所以要做一个监控脚本,当有502状态码时第一时间邮件告警通知我们。具体要求如下:...转载 2019-01-05 12:35:01 · 1929 阅读 · 2 评论 -
1. 备份MySQL数据库
假如一台MySQL服务器,跑着5个数据库,在没有做主从的情况下,需要对这5个库进行备份,具体要求如下:1) 每天备份一次,需要备份所有的库;2) 把备份数据存放到 /data/backup/ 下;3) 备份文件名称格式示例:database_name-2018-11-11.sql;4) 需要对1天前的所有sql文件压缩,格式为gzip;5) 本地数据保留1周;6) 需要把备份...转载 2018-12-29 15:38:30 · 432 阅读 · 1 评论 -
实现错误日志记录
要实现错误日志记录,当有新的错误日志产生时,能第一时间在新文件中记录下来。这里以nginx错误日志为例,内容如下:#!/bin/bash##This script is used for log alertsa=`grep "error" /usr/local/nginx/logs/error.log | sort -n | tail -1 | awk '{ print $0 }'`...原创 2018-11-22 16:16:03 · 1497 阅读 · 0 评论 -
Shell脚本(三)
20.9 Shell项目——分发系统对于大公司而言,肯定时不时会有网站或者配置文件更新,而且使用的机器肯定也是好多台,少则几台,多则几十甚至上百台。这样的话一台一台配置肯定是不现实的,所以,自动同步文件是至关重要的。而要如何实现自动同步呢?首先要有一台模板机器,把要分发的文件准备好,然后只要使用expect脚本批量把需要同步的文件分发到目标机器即可。整个过程也称为代码上线。expect脚本...原创 2018-08-01 17:11:27 · 982 阅读 · 2 评论 -
Shell脚本(二)
20.7 Shell中的数组shell脚本中也可以自定义数组,不常用但有时很有用。数组的基本操作具体格式如下:a=(1 2 3) #定义数组echo ${a[@]} #读取数组echo ${#a[@]} #读取数组元素个数echo ${a[2]} #读取第3个元素,数组元素的下标从0开始echo ${a[*]} #等同于${a[@]},显示整个数组a[1]...原创 2018-08-01 11:12:58 · 1956 阅读 · 0 评论 -
Shell脚本(一)
20.1 什么是Shell脚本shell脚本并不能作为正式的编程语言,因为它是在linux的shell中运行的,所以称为shell脚本。事实上,shell脚本就是一些命令的集合。假如完成某个需求需要一口气输入10条命令,对于简单的命令,我们可以直接在shell窗口中输入,但如果是比较长且复杂的命令,一次一次敲就会显得很麻烦。我们可以把这10条命令都记录到一个文档中,然后去调用文档中的命令,这样...原创 2018-07-30 08:44:01 · 51216 阅读 · 10 评论