脚本启动慢_Linux 常用运维脚本,建议收藏
同步本机时间
ntpdate 210.72.145.44
清除系统缓存,空出更多内存
free && sync && echo 3 > /proc/sys/vm/drop_caches && free
杀掉僵尸进程
kill $(ps -A -ostat,ppid | awk '/[zZ]/ && !a[$2]++ {print $2}')
显示全部arp解析
tcpdump 'arp' -e -i eth0 -n -p -t |grep is-ateth0对应要换成你的显步名称
监看本机网卡端口情况
tcpdump -n -vv tcp port $1 -i em1em1为对应的网卡名称。
检查本机连接数
netstat -nat |awk '{print $6}'|sort|uniq -c|sort -nr
查看tomcat日志中的异常
tail -F
/var/log/tomcat8/catalina.out |grep -E 'Exception|at' |grep -v WARN这里tomcat8要对应成你的相应版本
删除5天以前的tomcat日志
sudo find /var/lib/tomcat8/logs/ -mtime +5 -exec rm {} \;
清空 memcache 缓存
以下存成脚本,
#!/bin/sh#实现通过主机名,端口清相应的memcache缓存
if(($#<2));then echo "usage:$0 host port"; exit 1;fi#如果参数缺失,退出程序,返回状态1
exec 6<>/dev/tcp/$1/$2 2>/dev/null;#打开host的port 可读写的socket连接,与文件描述符6连接
if(($?!=0));then echo "open $1 $2 error!"; exit 1;fi#如果打开失败,$?返回不为0,终止程序
echo -e "flush_all">&6;echo -e "quit">&6;#将HEAD 信息,发送给socket连接
cat6;#从socket读取返回信息,显示为标准输出
exec 6exec 6>&-;#关闭socket的输入,输出
exit 0;
修改VirtualBox虚拟机的内存分配
保存脚本,第一个参数为虚拟机的名称,第二个为内存大小,如2G
#!/bin/bashVM=$1VBoxManage controlvm $VM poweroffVBoxManage modifyvm $VM --memory $2VBoxManage startvm $VM --type headless
为VirtualBox 虚拟机加磁盘
#!/bin/sh
#machine=phptestmachine=$1
VBoxManage controlvm "$machine" poweroff
disk=/home/xwx/VirtualBox\ VMs/$machine/${machine}_swap.vdi
#VBoxManage createhd --filename "$disk" --size 1024
#VBoxManage storageattach "$machine" --storagectl "IDE" --port 1 --type hdd --medium $disk#VBoxManage storageattach "$machine" --storagectl SATA --port 1 --type hdd --medium $diskVBoxManage storageattach "$machine" --storagectl "SATA 控制器" --port 1 --type hdd --medium "$disk"
修改克隆虚拟机的ip地址
虚拟机克隆之前,第一次启动时需要修改ip才能远程控制:
#!/bin/bash# set modifyip=/etc/network/interfaceshn=/etc/hostnamenetmask=255.255.255.0network=192.168.20.0broadcast=192.168.20.255gateway=192.168.20.1# mod ip、mask、gw、dns、hostnamecp $ip /etc/network/interfaces.baksed -ri 's/(iface eth0 inet).*/\iface eth0 inet static/' /etc/network/interfacesecho "Please input IP:"read ipaddif [ -n "$ipadd" ]; then echo "address $ipadd" >> $ip echo "Modify Completed "else echo "Not Modified" fiecho "netmask $netmask" >> $ipecho "Netmask Modify Completed "echo "network $network" >> $ipecho "Network Modify Completed "echo "broadcast $broadcast" >> $ipecho "Broadcast Modify Completed "echo "gateway $gateway" >> $ipecho "Gateway Modify Completed "echo "Please input hostname:"read hostnameif [ -n "$hostname" ]; then echo "$hostname" > $hn echo "Modify Completed "else echo "Default Hostname"fiecho "All modification completion"read -n1 -p "Whether restart network [Y/N]?"case $REPLY inY|y) echo /etc/init.d/networking restart;;N|n) echo echo "Network needs to restart to take effect!!!!!!";;esacexit
实时统计nginx日志
使用goaccess软件,可能用apt install goaccess或yum install goaccess安装。
sudo goaccess /var/log/nginx/access.log --log-format='%h %^[%d:%t %^] "%r" %s %b "%R" "%u" "-" "%v"' --date-format='%d/%b/%Y' --time-format='%H:%M:%S'
备份nginx配置文件
nginx会频繁修改,改之前最好备份一下:
##########################################################################mysqldump####################################################!/bin/sh# -----------------------------# the directory for story your backup file.backup_dir="/home/your/backup"
# date format for backup file (dd-mm-yyyy)time="$(date +"%Y%m%d")"
MKDIR="$(which mkdir)"RM="$(which rm)"MV="$(which mv)"TAR="$(which tar)"GZIP="$(which gzip)"
#针对不同系统,如果环境变量都有。可以去掉
# check the directory for store backup is writeabletest ! -w $backup_dir && echo "Error: $backup_dir is un-writeable." && exit 0
# the directory for story the newest backuptest ! -d "$backup_dir" && $MKDIR "$backup_dir"
$TAR -zcPf $backup_dir/$HOSTNAME.nginx.$time.tar.gz /etc/nginx$TAR -zcPf $backup_dir/$HOSTNAME.cron_daily.$time.tar.gz /etc/cron.daily
#delete the oldest backup 30 days agofind $backup_dir -name "*.gz" -mtime +30 |xargs rm -rf
exit 0;
nginx 自动筛选出访问量过大的ip进行屏避
#!/bin/bashnginx_home=/etc/nginxlog_path=/var/log/nginxtail -n10000 $log_path/access.log \ |awk '{print $1,$12}' \ |grep -i -v -E "google|yahoo|baidu|msnbot|FeedSky|sogou" \ | grep -v '223.223.198.231' \ |awk '{print $1}'|sort|uniq -c|sort -rn \ |awk '{if($1>50)print "deny "$2";"}' >>./blockips.conf
sort ./blockips.conf |uniq -u >./blockips_new.confmv ./blockips.conf ./blockips_old.confmv ./blockips_new.conf ./blockips.confcat ./blockips.conf#service nginx reload
监控各网站首页
#!/bin/sh
RED='\033[0;31m'GREEN='\033[0;32m'NC='\033[0m' # No Color
function test_domain { local domain=$1 status=`curl -s -o /dev/null -I -w "%{http_code}" $domain`
if [ $status -eq '404' ] then printf "${domain}${RED} ${status}${NC}\n"else printf "$domain$GREEN $status$NC\n" fi
}
domain_list=$'bixuebihui.cn\nwww.bixuebihui.cn\ndev.bixuebihui.cn\nblog.bixuebihui.cn\nbixuebihui.com\nwww.bixuebihui.com'
while read -r domain; do# echo "... $domain ..." test_domain "http://$domain" test_domain "https://$domain"
done <<< "$domain_list"
从mysql日志里过滤慢sql
#!/usr/bin/perl## Nathanial Hendler# http://retards.org/## 2001-06-26 v1.0## This perl script parses a MySQL slow_queries log file# ignoring all queries less than $min_time and prints# out how many times a query was greater than $min_time# with the seconds it took each time to run. The queries# are sorted by number of times it took; the most often# query appearing at the bottom of the output.## Usage: mysql_slow_log_parser logfile## ------------------------# SOMETHING TO THINK ABOUT (aka: how to read output)# ------------------------## Also, it does to regex substitutions to normalize# the queries...## $query_string =~ s/\d+/XXX/g;# $query_string =~ s/([\'\"]).+?([\'\"])/$1XXX$2/g;## These replace numbers with XXX and strings found in# quotes with XXX so that the same select statement# with different WHERE clauses will be considered# as the same query.## so these...## SELECT * FROM offices WHERE office_id = 3;# SELECT * FROM offices WHERE office_id = 19;## become...## SELECT * FROM offices WHERE office_id = XXX;### And these...## SELECT * FROM photos WHERE camera_model LIKE 'Nikon%';# SELECT * FROM photos WHERE camera_model LIKE '%Olympus';## become...## SELECT * FROM photos WHERE camera_model LIKE 'XXX';### ---------------------# THIS MAY BE IMPORTANT (aka: Probably Not)# ---------------------## *SO* if you use numbers in your table names, or column# names, you might get some oddities, but I doubt it.# I mean, how different should the following queries be# considered?## SELECT car1 FROM autos_10;# SELECT car54 FROM autos_11;## I don't think so.#
$min_time = 0; # Skip queries less than $min_time$min_rows = 0;$max_display = 10; # Truncate display if more than $max_display occurances of a query
print "\n Starting... \n";
$query_string = '';$time = 0;$new_sql = 0;
############################################### Loop Through The Logfile##############################################
while (<>) {
# Skip Bogus Lines
next if ( m|/.*mysqld, Version:.+ started with:| ); next if ( m|Tcp port: \d+ Unix socket: .*mysql.sock| ); next if ( m|Time\s+Id\s+Command\s+Argument| ); next if ( m|administrator\s+command:| );
# print $_; # if ( /Query_time:\s+(.*)\s+Lock_time:\s+(.*)\s/ ) { #if ( /Query_time:\s+(.*)\s+Lock_time:\s+(.*)\s+Rows_examined:\s+(\d+)/ ) { if ( /Query_time:\s+(.*)\s+Lock_time:\s+(.*)\s+Rows_examined:\s+(.*)/ ) {
$time = $1; $rows = $3; $new_sql = 1; # print "found $1 $3\n"; next;
}
if ( /^\#/ && $query_string ) {
if (($time > $min_time) && ($rows >= $min_rows)) { $orig_query = $query_string;
$query_string =~ s/\d+/XXX/g; $query_string =~ s/'([^'\\]*(\\.[^'\\]*)*)'/'XXX'/g; $query_string =~ s/"([^"\\]*(\\.[^"\\]*)*)"/"XXX"/g; #$query_string =~ s/([\'\"]).+?([\'\"])/$1XXX$2/g; #$query_string =~ s/\s+/ /g; #$query_string =~ s/\n+/\n/g;
push @{$queries{$query_string}}, $time; push @{$queries_rows{$query_string}}, $rows; $queries_tot{$query_string} += $time; $queries_orig{$query_string} = $orig_query; $query_string = '';
}
} else {
if ($new_sql) { $query_string = $_; $new_sql = 0; } else { $query_string .= $_; } }
}
############################################### Display Output##############################################
foreach my $query ( sort { $queries_tot{$b} <=> $queries_tot{$a} } keys %queries_tot ) { my $total = 0; my $cnt = 0; my @seconds = sort { $a <=> $b } @{$queries{$query}}; my @rows = sort { $a <=> $b } @{$queries_rows{$query}}; ($total+=$_) for @seconds; ($cnt++) for @seconds;
print "### " . @{$queries{$query}} . " Quer" . ((@{$queries{$query}} > 1)?"ies ":"y ") . "\n"; print "### Total time: " . $total .", Average time: ".($total/$cnt)."\n"; print "### Taking "; print @seconds > $max_display ? "$seconds[0] to $seconds[-1]" : sec_joiner(\@seconds); print " seconds to complete\n"; print "### Rows analyzed "; print @rows > $max_display ? "$rows[0] - $rows[-1]": sec_joiner(\@rows); print "\n";
print "$query\n"; print $queries_orig{$query}."\n\n";}
sub sec_joiner { my ($seconds) = @_; $string = join(", ", @{$seconds}); $string =~ s/, (\d+)$/ and $1/; return $string;}
exit(0);
本机路由表
ip route add 5.6.13.192/26 dev em1 src 5.6.13.218 table 10ip route add default via 5.6.13.254 table 10ip route add 5.6.13.192/26 dev em2 src 5.6.13.217 table 20ip route add default via 5.6.13.254 table 20ip route add 5.6.13.192/26 dev em1 src 5.6.13.218ip route add 5.6.13.192/26 dev em2 src 5.6.13.217ip route add default via 5.6.13.254ip rule add from 5.6.13.218 table 10ip rule add from 5.6.13.217 table 20ip route flush cache
出现异常时,用钉钉dingtalk报警
#!/bin/python# -*- coding: utf-8 -*-
from flask import Flaskfrom flask import requestimport jsonimport requests
app = Flask(__name__)
def transform(text): textMap = json.loads(text)
nodePorturl = 'http://192.168.10.182:3672' externalURL = textMap['externalURL'] print(externalURL) links =[]for alert in textMap['alerts']: print('-------------') time = alert['startsAt'] + ' -- ' + alert['endsAt'] generatorURL = alert['generatorURL']; generatorURL = nodePorturl+generatorURL[generatorURL.index('graph'):] summary = alert['annotations']['summary'] description = alert['annotations']['description'] status = alert['status'] title = alert['labels']['alertname'] link = {} link['title'] = title link['text'] = status + ': ' + description link['messageUrl'] = generatorURL link['picUrl'] = '' links.append(link)return links
@app.route('/',methods=['POST'])def send():if request.method == 'POST': post_data = request.get_data() alert_data(post_data)return "hello"
def alert_data(data): url = 'https://oapi.dingtalk.com/robot/send?access_token=YOUR_TOKEN' headers = {'Content-Type': 'application/json'}for link in transform(data): send_data = {"msgtype": "link", "link": link} print(send_data) r = requests.post(url, data=json.dumps(send_data), headers=headers)
if __name__ == '__main__': app.run(host='0.0.0.0', port=1111)
喜欢本号请点击上方关注!
部分图片、文字来源于网络,如有版权请联系删除!
脚本启动慢_Linux 常用运维脚本,建议收藏相关推荐
- 简单python脚本实例-五个python常用运维脚本面试题实例
原标题:五个python常用运维脚本面试题实例 一.用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/envpython import os for ro ...
- 常用的python脚本_五个python常用运维脚本面试题实例
一.用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/env python import os for root,dirs,files in os.wal ...
- 简单python脚本实例-python常用运维脚本实例
#提前配置好免密钥登陆,与apache服务 import pexpect import os ds_ip= '192.168.102.143'rs1_ip= '192.168.102.144'rs2_ ...
- oracle税务运维脚本练习,荣欣Linux运维+Oracle DBA初级+高级全套实战训练
第一阶段:企业版Linux系统运维基础.项目实战:112课时xa0 第二阶段:基于互联网门户Linux应用集群与Mysql数据库集群架构设计与维护,项目实战:112课时 第三阶段:Oracle DBA ...
- python怎么写运维脚本_python运维脚本实例
file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...
- 让你一步步成为运维专家之各种运维脚本
让你一步步成为运维专家之各种运维脚本 最近想做一个自动化运维的脚本,就整理一些资料,分享出来,一起共勉! 运维脚本参考:https://github.com/SwordfallYeung/BigDat ...
- 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!
整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新! 一.ffmpeg脚本 1.1 打开进程,并判断进程数量 1.2 关闭进 ...
- python自动化办公 51cto_利用python实现批量自动化运维脚本案例
本文为通过密码或密钥实现python批量自动化运维脚本案例分享,是老男孩linux培训 python课程教学案例内容,后续会分享多线程并发执行这个脚本的更高级的功能(http://oldboy.blo ...
- 哥们别逗 了,写个脚本那真不叫运维自动化!
哥们别逗 了,写个脚本那真不叫运维自动化! 2014-12-16 http://3060674.blog.51cto.com/3050674/1590803 好久没写文章了,最近要来刷下存在感,近两 ...
最新文章
- 深度学习 - 相关名词概念
- 边工作边刷题:70天一遍leetcode: day 97-1
- java算法之冒泡排序法
- ept技术_EPT技术在压载水处理中的运用
- python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
- 10.2-3 ifupifdown:激活与禁用网络接口
- MCUXpress IDE常用设置
- Work Queues(点对多)
- xilinx sdk在Debug模式下根据地址在内存里观察值
- quartus仿真21:JK触发器和D触发器实现110序列探测器
- keras 升级_如何入门Keras?
- 「业务架构」商业模式画布
- 防卒指南:996+健身≈猝死
- 【华为 OJ 】等差数列
- Flash应用之百宝箱
- ngx-datatable中文教程
- python名人问题_Python 思考录 练习01
- java计算时间差_Java中计算两个日期的时间差
- 思维导图带你看遍花样百出的各类月饼?
- 关于BERT预训练模型,你想知道的都在这~