IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 系统运维 -> 【自动化】第二篇-shell流程自动化 -> 正文阅读

[系统运维]【自动化】第二篇-shell流程自动化

图片

图片来自网络

摄影|Bestviewstock

----------------------------------------------------------◇?背景 ◇---------------------------------------------------------

最近,运维的同学经常写一些东西到linux服务器上,我需要定期的将这些东西(日志)获取到,然后处理发送到微信群里。(【打卡】友好机器人🤖给你提醒,企微用起来

第一步想到的就是:如果文件下产生了日志,运维的同学就通知我,我立马一顿操作猛如虎,然后运行几个脚本,带几个参数,搞定。但是有更加自动化的方法吗?

有!

#1

开动脑筋

这种场景我似乎遇到过很多次了。核心涉及用一个文件标记📌上一状态T0,然后不断检测新的日志文件,只要当前检查状态T1和上一状态T0不一致,则产生新的动作,更新标记。否则,就不执行操作。

图片

最好用来比较同时又能够区别不同的文件的就是时间戳了。${new_version}记录了当前最新的文件,${last_version}标记了上一最新版本文件。

last_version=$(cat last_version)if?((${new_version}?>?${last_version}));?then????echo?"写入成功"????$python?wechat_robot.py????echo?${new_version}?>"last_version"else????echo?"fi"fi

#2

再进一步

但是如何拿到最新的文件呢?

这个在python里面好办,直接获取文件列表,正序排序取最后一个就是了。那么shell中类似的是怎么做的呢?

很简单:

file_names=$(ls)file_arr=($file_names)
new_file=${file_arr[-1]}new_version=${new_file:0:10}

$(ls)本身就是排序好了的,转成file_arr后,直接取最后一个${file_arr[-1]}就得到了最新的文件。文件可能有各种各样的后缀(形如1633701622.csv,1633701282.tar.gz等)。那就直接截取前10个得到版本号,就可以直接比较了。

#3

有效封装

wechat_robot.py模块可以进行有效封装,适用大多数场景

def send_msg(msg, send_to, api=webhook):
    post_msg_context = {
        "msgtype": "text",
        "text": {
            "content": msg,
            "mentioned_mobile_list": send_to
        },
    }
    headers = {"Content-Type": "application/json"}
    res = requests.post(api,
                        headers=headers,
                        data=json.dumps(post_msg_context))
  
  def send_img(img, send_to, api=webhook):
    with open(img, "br") as f:
        fcont = f.read()
        # 转化图片的base64
        ls_f = base64.b64encode(fcont)
        # 计算图片的md5
        fmd5 = hashlib.md5(fcont)
    post_img_context = {
        "msgtype": "image",
        "image": {
            "base64": ls_f.decode('utf8'),
            "md5": fmd5.hexdigest(),
            "mentioned_mobile_list": send_to
        },
    }
    headers = {"Content-Type": "application/json"}
    res = requests.post(api,
                        headers=headers,
                        data=json.dumps(post_img_context))

def send_file(filename, send_to, api=webhook):
    id_url = api.replace("send", "upload_media") + '&type=file'  # 上传文件接口地址
    data = {'file': open(filename, 'rb')}  # post jason
    response = requests.post(url=id_url, files=data)  # post 请求上传文件
    json_res = response.json()  # 返回转为json
    media_id = json_res['media_id']  # 提取返回ID

    post_file_context = {
        "msgtype": "file",
        "file": {
            "media_id": media_id,
            "mentioned_mobile_list": send_to
        },
    }
    headers = {"Content-Type": "application/json"}
    res = requests.post(api,
                        headers=headers,
                        data=json.dumps(post_file_context))

?

#4

消息转图片

但是有时候,消息还是图片好看。那就需要常见的两个python库了。prettytable和ImageDraw。

图片

这个库可以有效的把string转成图片。

?

?

感兴趣,可以关注公众号elegantcoin,接受更多消息

  系统运维 最新文章
配置小型公司网络WLAN基本业务(AC通过三层
如何在交付运维过程中建立风险底线意识,提
快速传输大文件,怎么通过网络传大文件给对
从游戏服务端角度分析移动同步(状态同步)
MySQL使用MyCat实现分库分表
如何用DWDM射频光纤技术实现200公里外的站点
国内顺畅下载k8s.gcr.io的镜像
自动化测试appium
ctfshow ssrf
Linux操作系统学习之实用指令(Centos7/8均
上一篇文章      下一篇文章      查看所有文章
加:2021-10-12 23:53:40  更:2021-10-12 23:55:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/15 18:28:38-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码