海运的博客

Awk的内置变量

发布时间:May 6, 2012 // 分类:Shell // No Comments

awk常用内置变量:

FS 输入分隔符,等同于-F
OFS 输出分隔符
NF 列数
FNR 输入文件的记录数
NR 行数
RS 输入记录分隔符
ORS 输出记录分隔符
FIRENAME 当前处理的文件名

Awk应用举例:

#https://www.haiyun.me
awk 'BEGIN {num=5} {FS=":"} $3>num {OFS="-";print NF,NR,FNR "\t" $1 "\t" $2 "\t" $3 "\t" $NF} END{print FILENAME}' /etc/passwd
7-13-13    games    x    12    /sbin/nologin
7-14-14    gopher    x    13    /sbin/nologin
7-15-15    ftp    x    14    /sbin/nologin
7-16-16    nobody    x    99    /sbin/nologin
7-17-17    nscd    x    28    /sbin/nologin
7-18-18    vcsa    x    69    /sbin/nologin
7-19-19    pcap    x    77    /sbin/nologin

Nginx/Lnmp定时分割日志shell脚本

发布时间:May 5, 2012 // 分类:日记分析 // No Comments

如果服务器访问量较大,Nginx日志占用空间也是个很大的问题,也不可能每天都手工清除日志,久而久之硬盘空间。。。
此脚本用于每天定时切割日记,备份30天内的日志数据备查,并删除30前备份的数据。

#/bin/bash
#Create by https://www.haiyun.me
log_path="/home/wwwlogs"
mkdir -p $log_path/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")  
for logname in $(ls /home/wwwlogs/*.log |awk -F/ '{print $NF}')
do
         mv $log_path/$logname $log_path/$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/$(date -d "yesterday" +"%d")/$logname
 done
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find $log_path -type d -mtime +30 -exec rm {} \;

将此脚本添加到计划任务:

echo "30 1 * * * sh /path/file.sh" > /etc/cron.d/nginx
#每天凌晨1点30执行任务

Awk使用空格和字符为域分隔符

发布时间:April 23, 2012 // 分类:Shell // No Comments

使用多个字符为域分隔符:

awk -F[:/] '{print $1,$NF}' /etc/passwd  #使用:和/为分隔符

Awk默认空格为分隔符,如果使用空格加字符为分隔符呢?这个问题困扰我很久了,试了很多方法,下面这个方法勉强算可以吧。

iostat 2 2|grep ^dm-|awk -F"[ ]+|[-]" '{print $2,$NF}'  #使用空格和-为分隔符

Shell监控kloxo面板Could not open database connection自动修复

发布时间:April 16, 2012 // 分类:Shell,控制面板 // No Comments

kloxo经常出现Could not open database connection真是个让人头痛的问题,按照官方提供的方法修复后有客户反应以后还是出现此问题,不得已写个脚本放后台定时监控网站,反正也不占用多少资源,如遇到Could not open database connection问题自动修复。

#!/bin/bash
#set -x
#Created by https://www.haiyun.me
website=0.0.0.0:7778 #kloxo面板地址
while true
do
if
curl $website|grep Could
then
sh /script/fix-program-mysql
/etc/init.d/mysqld restart
fi
sleep 120
done

执行:

nohup sh /path/file.sh & #以nohup方式后台运行
echo "nohup sh /path/file.sh &" >> /etc/rc.local #开机启动

用Shell脚本监控服务器并发邮件报警

发布时间:April 15, 2012 // 分类:系统监控,Shell // No Comments

对于服务器来说在线率很重要,出现问题要能及时解决,但系统管理员不能一直守在电脑旁边,通过脚本监控网站出现问题及时通过mail通知管理员,如果是139邮箱还可免费手机短信通知。
通过系统直接发送mail容易被拦截,可使用mail连接第三方smtp发送邮件

#!/bin/bash
#Created by https://www.haiyun.me
#set -x
while true
do
    list=(www.haiyun.me cp.www.haiyun.me)
    mail=onovps@www.haiyun.me
    date=$(date -d "today" +"%Y-%m-%d-%H:%M:%S")
    i=0
    id=${#list[*]}
    while [ $i -lt $id ] 
    do
        if ping -c1 ${list[$i]} >/dev/null
        then
            echo  $date:服务器${list[$i]}能ping通。
        else
            if curl -m 10  ${list[$i]} > /dev/null 
            then
                echo  $date:服务器${list[$i]} ping不通,能打开网页。
            else
                echo  "您好,据系统监测服务器${list[$i]}不能访问且ping不通,请及时处理!故障发生时间:$date"|mail -s "服务器${list[$i]}不能连接! 故障发生时间:$date" $mail
                until 
                    date=$(date -d "today" +"%Y-%m-%d-%H:%M:%S")
                    ping -c1 ${list[$i]} >/dev/null && echo "恭喜!服务器${list[$i]}已恢复正常,恢复时间:$date"|mail -s "服务器${list[$i]}已恢复正常! 恢复时间:$date" $mail
                do
                    sleep 5
                done
            fi
        fi
        let i++
    done
    sleep 60
done

执行:

nohup sh /path/file.sh & #放到后台运行,程序60秒检查一次网站。

开机运行:

echo "nohup sh /path/file.sh & " >> /etc/rc.local
分类
最新文章
最近回复
  • opnfense: 谢谢博主!!!解决问题了!!!我之前一直以为内置的odhcp6就是唯一管理ipv6的方式
  • liyk: 这个方法获取的IPv6大概20分钟之后就会失效,默认路由先消失,然后Global IPV6再消失
  • 海运: 不好意思,没有。
  • zongboa: 您好,請問一下有immortalwrt設定guest Wi-Fi的GUI教學嗎?感謝您。
  • 海运: 恩山有很多。
  • swsend: 大佬可以分享一下固件吗,谢谢。
  • Jimmy: 方法一 nghtp3步骤需要改成如下才能编译成功: git clone https://git...
  • 海运: 地址格式和udpxy一样,udpxy和msd_lite能用这个就能用。
  • 1: 怎么用 编译后的程序在家里路由器内任意一台设备上运行就可以吗?比如笔记本电脑 m参数是笔记本的...
  • 孤狼: ups_status_set: seems that UPS [BK650M2-CH] is ...