自动检测网站健康shell脚本

一、背景介绍 我的WordPress网站最近老是宕机无法提供服务,网站架构是经典的 Linux + OpenResty + MySQL + PHP , 宕机后大多数情况下不能立即处理,于是想写个自动检测网站健康的shell脚本,主要功能是定时检测网站运行是否正常,如果宕机,则自动初始化MySQL和PHP服务,如果初始化后还不能访问,则邮件告警通知我。 二、实现过程 1  编写脚本 脚本的内容如下,目前运行十来天左右还算正常。 #!/bin/bash #Author:Attaboy #Description:this script is made to check website health and roll back automattically. # Modify history #       20171122 #       20171130 dst_mail="[email protected]" mail_title="Linode Website Health Report" mail_content="\nOops,Your website is still out of service after initiating!\n\n$(iptables -vnL)\n\n\n$(netstat -nltp)\n\n" free_mem=$(free -m |…

Continue Reading

双VPS增量备份实践

一、背景介绍     本人有两个vps,一个linode,一个阿里云,其中linode是本博客所在主机,很多资料需要定期备份。恰好阿里云的磁盘够大,整个linode主机磁盘拷贝进去也有富余,于是简单做个增量备份的shell脚本。 在这里献丑了。 二、配置过程 1  配置两个vps的ssh免密码登录 2  两个vps均安装rsync     yum install -y rsync 3  编写备份脚本 备份脚本的内容如下, #!/bin/bash   #  this script is made to automatically backup data of host linode #  Author:Attaboy #  Modify history: #       2017.11.11 #       2017.11.14  add local backup function #       2017.11.17  do not print debug info to log file when…

Continue Reading

sed删除不包含指定单词的行

问题:有个文件名为file,内容如下,   ACCTWARROOM.JFJ_JSPFP_FILL T accTwarRoom.uut_jjfJ_JJJF_OWPERP   ACC T ACCTWARROOM.JJ_POLL_JIM L TTT acctwarroom.jj_pq_jjjj_ppp t aipindictment 要求:删除不包含单词acctwarroom的行(不区分单词的大小写) ———————————————————————————————————————– 答案:   方法1  先将所有字母的小写转换为大写格式,再打印包含指定单词的行。   [pc@iZj6cj7qz0pp3b2plfmewiZ ~]$ sed -n  -e ‘s@[a-z]@\u&@g ; /ACCTWARROOM/p' file ACCTWARROOM.JFJ_JSPFP_FILL T ACCTWARROOM.UUT_JJFJ_JJJF_OWPERP   T ACCTWARROOM.JJ_POLL_JIM L ACCTWARROOM.JJ_PQ_JJJJ_PPP T   方法2  先将所有字母转为小写,再删除不包含指定单词的行   [pc@iZj6cj7qz0pp3b2plfmewiZ ~]$ cat file | sed -e ‘s@[A-Z]@\l&@g ; /\<acctwarroom\>/ !d' acctwarroom.jfj_jspfp_fill t…

Continue Reading

Linux中转换字符串大小写的姿势

在数据处理中肯定会遇到大小写的转换,下面说说Linux中转换字符串大小写的几种方式。 1  AWK awk是强大的报告生成器,其很多内置函数很有用,比如tolower和toupper就是处理大小写的,用命令说话,如下, PS:gawk才支持大小写的转换函数tolower和toupper。 2  tr tr是专门处理字符串的神器,话不多说,如下图, 3 tr tr命令还有一种方法转换大小写。 3  sed sed作为古老的流编辑器,仍然是一把文本处理的利剑。 将每个单词的首字母变为大写,如图, 将所有小写转换为大写,如图, 将所有大写转换为小写,如图,   关于sed的这个用法我还是头一次看见,有兴趣的朋友可以在shell下运行info sed查看解释,大致如下,   3.5 The `s' Command =================== The syntax of the `s' (as in substitute) command is `s/REGEXP/REPLACEMENT/FLAGS'.  The `/' characters may be uniformly replaced by any other single character within any given `s' command. The…

Continue Reading

自用PC增量备份Shell脚本

最近自己的PC硬盘里丢了个重要文件,应该是我误删除的,所以提醒大家千万别乱删文件,就算删除也要备份一俩月。于是一怒之下写了个shell脚本,专门用于备份重要文件的,主要是通过rsync这个强大的同步工具实现,脚本里也使用了函数创建和调用,具体内容如下, #!/bin/bash   #  this script is made to automatically backup data of host S5 #  Author:Attaboy #  history: #       2016.06.28 #       2016.07.03 #       2016.07.14 #       2017.09.02 #       2017.09.04 #       2017.09.14 #       2017.09.17 #       2017.11.04  anotate bak_node_3 function #       2017.11.07  allow bak_node_3 function #       2017.11.11  allow bak_node_4 function #       2017.11.12  add code to start DELL…

Continue Reading

sed删除指定字符开头的行的上一行的指定字符

最近在学习Oracle11g数据库时,需要将MySQL数据插入脚本转换成Oracle脚本,以在Oracle数据库中新建表和插入数据,方便练习。可是MySQL脚本太大,普通文本编辑器无法处理(7个G),于是用Linux下的sed老牌流编辑器,在我的DELL R710服务器上来做。 其中,有一段SQL脚本内容如下, 20000110119', '2016-02-04 02:00:01', '2016-02-04 02:00:00', '1200.00', '超时未领完'); INSERT INTO bonusreturnorder VALUES ('50', '254', '697', '2', '1', 'WX20160203085132174280', 'HBTK20160204020001045349', '2016-02-04 02:00:02', '2016-02-04 02:00:01', '600.00', '超时未领完'); — BONUSID number(11) , DELETEFLAG number(2) , TYPE number(2) , ); CREATE TABLE bonususer ( — SENDUSERID number(11) , SENDUSERNAME varchar2(32) , BONUSTICKETNO varchar2(32) , ); INSERT INTO…

Continue Reading

find查找文件忽略某些目录

    Linux中查找文件时,有时候不想遍历指定目录下的所有子目录,因为子目录可能包含N多文件,扫描时间慢,这时候就需要忽略这些目录。     举个实例,例如要扫描磁盘根目录下所有超过100M的文件,但是目录“/mnt”和"/media"下往往有很多文件,要忽略他们,具体方法如下,       find / \( -path "/mnt" -o -path "/media" \) -prune -o -type f -size +100M -print 2>/dev/null      在Linux实际运行的结果展示如下图,      

Continue Reading

AWK匹配大小写

在用AWK匹配字符串时候, 数字还好,如果是字母就需要考虑大小写,除非你清晰的记得你要搜索的字符串。 废话不多说,例子说话。 有个文件名为file.txt,内容如下, 376471 376471 java.lang.NullPointerException: null 376584 376584 java.lang.NullPointerException: null 376624 376624 java.lang.NullPointerException: null 376767 376767 java.lang.NullPointerException: null 376807 376807 java.lang.NullPointerException: null 376937 376937 java.lang.NullPointerException: null 376977 376977 java.lang.NullPointerException: null   问: 如何用AWK匹配NullPointerException字符串,在你不知道这个字符串里哪个是大小写的情况下?   答:AWK里有内建函数tolower()和toupper(),可以将域字段转换为小写或大写 [pc@centos603 ~]$ awk 'tolower($0) ~ /nullpoint/ { print NR,FNR,$0 }' file.txt 1 1 376392 376392 java.lang.NullPointerException: null 2…

Continue Reading

AWK去除某列或某行数据

一、去列 有些情况下, 我们再文本处理的时候需要把前面几列删除掉,特别是在使用去重uniq命令的时候。 使用AWK可以解决问题。 例如,一个文件file.txt内容如下,需要进一步的去重动作,此时需要删除第一列再使用uniq命令。        13   app_version: '1' } {}      17   app_version: '1' } {}       1   app_version: '1' } {}       1   app_version: '1' } {}       1   app_version":"1.2.0","       1   app_version":"1.2.0","       1   app_version":"1.2.1","       1   app_version":"1.2.1","       1   app_version":"1.2.1","       1   app_version":"1.2.1","       1   app_version":"1.2.1","       1   app_version":"1.2.1","      …

Continue Reading

sed删除所有空行的正确姿势

一般情况下,我们删除文本文件里 的空行的命令是  sed -i -e '/^$/d' file   最近拷贝一段文字,想统计有多少行,但是这段文字里有很多空行,于是用上面的命令删除空行,不管用,空行依然在。 原因分析: 空行不是全由空格组成,还有tab空格 正确姿势:sed -i -e '/^[ \t]*$/d' file

Continue Reading