博客
关于我
Linux学习总结(55)——Linux 运维常用脚本
阅读量:790 次
发布时间:2023-02-03

本文共 11871 字,大约阅读时间需要 39 分钟。

系统管理命令集

同步本机时间

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#如果参数缺失,退出程序,返回状态1exec 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连接cat<&6;#从socket读取返回信息,显示为标准输出exec 6<&-;exec 6>&-;#关闭socket的输入,输出exit 0;

修改VirtualBox虚拟机的内存分配

#!/bin/bashVM=$1VBoxManage controlvm $VM poweroffVBoxManage modifyvm $VM  --memory $2VBoxManage startvm $VM --type headless

为VirtualBox 虚拟机加磁盘

#!/bin/sh#machine=phptestmachine=$1VBoxManage controlvm "$machine" poweroffdisk=/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地址

#!/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 ipadd   if [ -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 writeable.test ! -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 -rfexit 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.confsort ./blockips.conf |uniq -u  >./blockips_new.confmv ./blockips.conf ./blockips_old.confmv ./blockips_new.conf ./blockips.confcat ./blockips.conf#service nginx  reload

监控各网站首页

#!/bin/shRED='\033[0;31m'GREEN='\033[0;32m'NC='\033[0m' # No Colorfunction 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 queryprint "\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/([\'\']).*?(\\2)/$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 requestsapp = 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)

转载地址:http://srzfk.baihongyu.com/

你可能感兴趣的文章
Linux学习总结(22)——CentOS7.2安装Nginx
查看>>
Linux学习总结(24)——Linux查找文件命令
查看>>
Linux学习总结(26)——Shell常用命令总结
查看>>
Linux学习总结(28)——Linux主机加固
查看>>
Linux学习总结(28)——Linux主机加固
查看>>
Linux学习总结(28)——Linux主机加固
查看>>
Linux学习总结(29)——CentOS 6和CentOS 7区别总结
查看>>
Linux学习总结(2)——linux常用命令大全
查看>>
Linux学习总结(2)——linux常用命令大全
查看>>
Linux学习总结(30)——优秀程序员喜欢用Linux操作系统
查看>>
Linux学习总结(36)——创建、复制、剪切、重命名、清空和删除文件夹的命令
查看>>
Linux学习总结(38)——Linux超实用的30个命令
查看>>
Linux学习总结(39)——系统管理员应该知道的 20 条 Linux 命令
查看>>
Linux学习总结(3)——Linux实用工具
查看>>
Linux学习总结(40)——史上最全Linux命令科普
查看>>
Linux学习总结(41)——运维不仅仅是Linux
查看>>
Linux学习总结(42)——Linux之Bash脚本入门学习
查看>>
Linux学习总结(43)——企业运维最常用的150个Linux命令
查看>>
Linux学习总结(44)——Linux操作系统基础知识
查看>>
Linux学习总结(45)——Linux服务器出现卡慢的基本解决方法
查看>>