专栏首页fanzhh的技术笔记如何在ubuntu上定时抓取错误日志并发至管理员信箱

如何在ubuntu上定时抓取错误日志并发至管理员信箱

介绍

我希望在ubuntu服务器上部署的nginx + uwsgi应用,运行出现错误时我能尽快知道并解决。应用运行中,运行日志保存在/tmp/ypk.log文件中,若出新错误,日志中会写入如DataError: invalid input syntax for type date: "3年"……类似记录。我的思路是定时扫描这个日志文件,如果出现新的Error关键字,就将相关的信息发至我的邮箱。这样的任务,非Shell脚本语言不能实现。

Shell脚本语言介绍

Shell脚本,又称Shell命令稿、程序化脚本,是一种电脑程序与文本文件,内容由一连串的shell命令组成,经由Unix Shell直译其内容后运作。被当成是一种脚本语言来设计,其运作方式与直译语言相当,由Unix shell扮演命令行解释器的角色,在读取shell脚本之后,依序运行其中的shell命令,之后输出结果。利用shell脚本可以进行系统管理,文件操作等。在Unix及所有的类Unix系统中,如Linux、FreeBSD等操作系统,都存在shell脚本。依照Unix shell的各种不同类型,shell脚本也有各种不同方言。在DOS、OS/2、Microsoft Windows中的批处理文件,跟shell脚本有类似的功能。

脚本中用到的命令

  • grep, Linux系统中grep命令是一种强大的文本搜索工具,它能使用正则表达式搜索文本,并把匹 配的行打印出来。grep全称是Global Regular Expression Print,表示全局正则表达式版本,它的使用权限是所有用户。
  • sendemail, 邮件发送工具,可以看这篇文章如何在ubuntu上使用sendemail发送邮件
  • comm, 逐行比较两个文件的内容。

脚本的程序流程

程序流程

脚本

#!/bin/bash

# 判断ypk_error是否存在
if [ ! -e /tmp/ypk_error ]; then
  # 如果不存在,在系统日志中搜索Error关键字,保存到文件ypk_error中
  grep -n Error /tmp/ypk.log > /tmp/ypk_error
  # 判断 ypk_error 是否为空
  if [ -s /tmp/ypk_error ]
  then
    # 非空,发送给系统管理员
    sendemail -f 发件人地址 -t 管理员邮箱 -u "ypk error log" -s smtp服务器 -o tls=yes -xu 用户名 -xp 密码 -m < /tmp/ypk_error
  fi
# 如果ypk_error文件已经存在
else
  # 与新生成文件比较,比较结果写入diff文件
  comm -23 <(grep -n Error /tmp/ypk.log) /tmp/ypk_error > /tmp/diff
  if [ -s /tmp/diff ]
  then
    # 如果比较结果非空,则发送
    sendemail -f 发件人地址 -t 管理员邮箱 -u "ypk error log" -s smtp服务器 -o tls=yes -xu 用户名 -xp 密码 -m < /tmp/diff
    # 生成新的ypk_error文件
    grep -n Error /tmp/ypk.log > /tmp/ypk_error
  fi
fi

设为定时运行

编辑ubuntu crontab定时脚本:

crontab -e

设为每小时的30分执行一次:

30 * * * * /home/user/send_ypk_err.sh

运行结果

2017-12-26 16-06-23屏幕截图.png

OK。

本文参考了这篇文章

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • Nginx如何添加虚拟主机

    在sites-enabled内创建指向sites-available目录虚拟主机文件的软链接:

    fanzhh
  • 100天机器学习实践之第2天

    这是一种基于独立的变量X预测相关变量Y的方法。这种方法假设两个变量线性相关。因此,我们的目标是找到一种函数,能够根据X尽可能精确地预测Y值。

    fanzhh
  • 100天机器学习实践之第1天

    练习中,这两个重要的库每次都要导入。Numpy包含数学函数,Pandas用于导入和管理数据集。

    fanzhh
  • 配置深度学习主机与环境(TensorFlow+1080Ti) | 第四章 基于Anaconda的TensorFlow安装

    配置深度学习主机与环境(TensorFlow+1080Ti): 01 概念介绍 Anaconda Anaconda(https://www.continuu...

    用户1332428
  • 产品经理必备的6款效率神器,到底好用在哪?

    腾讯大讲堂
  • Ubuntu“无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)

    [scode type="yellow"]Ubuntu “无法获得锁”解决方案(E: 无法获得锁 /var/cache/apt/archive)[/scode]

    乐心湖
  • 技术 | 可通电纤维让衣服实现供暖,在冬季仅用低电压就能带来舒适的体感

    镁客网
  • ubuntu 16.04安装软件常见错误 Could not get lock /var/lib/dpkg/lock - open (11: Resource temporarily unavaila

      因为刚装好的Ubantu系统,内部缺少很多软件源,这时,系统会自动启动软件源更新进程“apt-get”,并且它会一直存活。由于它在运行时,会占用软件源更新时...

    黑泽君
  • 网络序?本地序?傻傻分不清楚。。。

    网络序?本地序?傻傻分不清楚。。。 这个问题源于最近做的一个项目,需要用Node.js进行socket网络编程,涉及到使用TCP/UDP通过自定义的二进制数据序...

    IMWeb前端团队
  • ​hacker必会技能!

    网络安全公司CrowdStrike发布了《2020全球威胁态势报告》,其研究结果显示“无文件恶意软件”攻击的趋势增加,无文件恶意软件的攻击数量超过了恶意软件的攻...

    Gamma实验室

扫码关注云+社区

领取腾讯云代金券