同步本机时间

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 常用运维脚本,建议收藏相关推荐

  1. 简单python脚本实例-五个python常用运维脚本面试题实例

    原标题:五个python常用运维脚本面试题实例 一.用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/envpython import os for ro ...

  2. 常用的python脚本_五个python常用运维脚本面试题实例

    一.用Python写一个列举当前目录以及所有子目录下的文件,并打印出绝对路径 #!/usr/bin/env python import os for root,dirs,files in os.wal ...

  3. 简单python脚本实例-python常用运维脚本实例

    #提前配置好免密钥登陆,与apache服务 import pexpect import os ds_ip= '192.168.102.143'rs1_ip= '192.168.102.144'rs2_ ...

  4. oracle税务运维脚本练习,荣欣Linux运维+Oracle DBA初级+高级全套实战训练

    第一阶段:企业版Linux系统运维基础.项目实战:112课时xa0 第二阶段:基于互联网门户Linux应用集群与Mysql数据库集群架构设计与维护,项目实战:112课时 第三阶段:Oracle DBA ...

  5. python怎么写运维脚本_python运维脚本实例

    file是一个类,使用file('file_name', 'r+')这种方式打开文件,返回一个file对象,以写模式打开文件不存在则会被创建.但是更推荐使用内置函数open()来打开一个文件 . 首先 ...

  6. 让你一步步成为运维专家之各种运维脚本

    让你一步步成为运维专家之各种运维脚本 最近想做一个自动化运维的脚本,就整理一些资料,分享出来,一起共勉! 运维脚本参考:https://github.com/SwordfallYeung/BigDat ...

  7. 整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新!

    整理全网Shell脚本合集,Java脚本,运维脚本,告警脚本,监控脚本,日志脚本,docker脚本等---------持续更新! 一.ffmpeg脚本 1.1 打开进程,并判断进程数量 1.2 关闭进 ...

  8. python自动化办公 51cto_利用python实现批量自动化运维脚本案例

    本文为通过密码或密钥实现python批量自动化运维脚本案例分享,是老男孩linux培训 python课程教学案例内容,后续会分享多线程并发执行这个脚本的更高级的功能(http://oldboy.blo ...

  9. 哥们别逗 了,写个脚本那真不叫运维自动化!

    哥们别逗 了,写个脚本那真不叫运维自动化! 2014-12-16 http://3060674.blog.51cto.com/3050674/1590803  好久没写文章了,最近要来刷下存在感,近两 ...

最新文章

  1. 深度学习 - 相关名词概念
  2. 边工作边刷题:70天一遍leetcode: day 97-1
  3. java算法之冒泡排序法
  4. ept技术_EPT技术在压载水处理中的运用
  5. python datetime timedelta函数_Python Pandas DatetimeIndex.to_perioddelta()用法及代码示例
  6. 10.2-3 ifupifdown:激活与禁用网络接口
  7. MCUXpress IDE常用设置
  8. Work Queues(点对多)
  9. xilinx sdk在Debug模式下根据地址在内存里观察值
  10. quartus仿真21:JK触发器和D触发器实现110序列探测器
  11. keras 升级_如何入门Keras?
  12. 「业务架构」商业模式画布
  13. 防卒指南:996+健身≈猝死
  14. 【华为 OJ 】等差数列
  15. Flash应用之百宝箱
  16. ngx-datatable中文教程
  17. python名人问题_Python 思考录 练习01
  18. java计算时间差_Java中计算两个日期的时间差
  19. 思维导图带你看遍花样百出的各类月饼?
  20. 关于BERT预训练模型,你想知道的都在这~

热门文章

  1. 通过Servlet的response绘制页面验证码
  2. openSUSE 13.1 Milestone 2 发布
  3. 一段按页自动滚动文字或图片的Js代码
  4. 私有5g网络_Verizon与诺基亚合作部署私有5G网络
  5. message:MCODE参数不存在,mobile类型mcode参数必需
  6. Arcgis10安装说明
  7. 通用的MIME类型:application/octet-stream
  8. eclipse中git解决冲突
  9. HDU 1176 免费馅饼 (动态规划、另类数塔)
  10. win7NVIDIA显卡驱动升级时卡住