Shell - cron_protect.sh 监控 Python、Streaming 程序

目录

一.引言

二.Flink 程序监控

1.shell 脚本

2.crontab 配置

三.Python 程序监控

1.shell 脚本

2.crontab 配置 

四.总结


一.引言

业务有流式处理数据的需求,需要 7x24 通过 Flink + Python 程序进行处理。为了监控 Flink 与 Python 的程序运行状态并在程序异常时重启对应程序,开发了对应的流式程序监控脚本。特此记录,供以后类似任务快捷使用。

二.Flink 程序监控

1.shell 脚本

在 linux 机器 vim cron_protect.sh 填入下述信息:

#!/bin/bash

dat=`date +%Y%m%d`
# 任务在 linux 机器的对应目录
base_path='your_path'
cd $base_path
time=`date "+%Y%m%d-%H%M"`


function check() {
# Flinl、Spark Streaming 程序的 appName
appname=$1
appnum=`yarn --config /data0/yarn-streaming application -list | grep $appname| awk '{print $1}'|wc -l`
if [ "$appnum" -eq "1" ];then
    echo "$appname $time ok"
elif [ "$appnum" -eq "0" ];then
    sh killAndRerun.sh
    sendMail
else
    echo "任务存在多个实例"
    appId=`yarn --config /data0/yarn-streaming application -list | grep $appname| awk '{print $1}'`
    arr=(${appId// / })
    for i in ${arr[@]}
    do
        yarn --config /data0/yarn-streaming application -kill $i
        echo 'kill' $i
    done
    sh killAndRerun.sh
    sendMail
fi
}

check yourAppName

 yarn-streaming 获取当前 AppName 存在的实例数

 app_num 判断当前 app_num 分别为 0、1、其他

        - 0 代表任务异常,调用启动程序重启服务

        - 1 代表任务正常,do nothing

        - 其他 存在多个实例,kill 掉全部异常任务,重启对应服务

send_mail  调用告警系统发报警提示任务异常重启

Tips:

不同环境下,yarn-streaming 的命令可能存在差异,上面 yarn-streaming 相关操作请根据自己服务器环境的命令进行修改。如果是 Flink 流程序,也可以在内部调用 env.setRestartStrategy 方法定义对应的重启策略。

2.crontab 配置

0-59/5 * * * * source ~/.bash_profile && cd $base_path && sh cron_protect.sh >> cron.log

这里任务是 7x24 执行,博主设置了 0-59/5 即 5 min 检查一次,也可以根据自己的需求调整 crontab 的频率。运行后,会每 5 min 打印程序运行状态:

三.Python 程序监控

1.shell 脚本

#!/bin/bash

cd $base_path

# 脚本名称
PYTHON_PROGRAM_NAME='your.py'
# 任务 pid
PYTHON_PID=$(pgrep -f $PYTHON_PROGRAM_NAME)

# 检查pid是否存在
if [ -z "$PYTHON_PID" ]; then
  # pid不存在,python程序未运行,需要重启
  echo "Python程序未运行,正在重启..."
  nohup python -u $PYTHON_PROGRAM_NAME >> ./log/log_`date +\%Y\%m\%d`.log 2>&1 &
else
  # pid存在,python程序正常运行
  echo "Python程序正在运行,pid: $PYTHON_PID"
fi

 PYTHON_PROGRAM_NAME 要执行的 python 文件

 PYTHON_PID 获取对应 python 程序的 pid

 python -u pid 存在不执行,pid 不存在执行 python -u 启动对应任务

Tips:

在Python命令行中,"-u" 选项是指以无缓冲的方式来执行Python脚本。通常情况下,Python 会将输出缓冲,这意味着它会等到有一定数量的数据要输出时才进行输出。这可能会导致输出延迟或者无法实时看到输出结果。当使用 "-u" 选项时,Python 将立即输出结果,而不会缓冲。这在需要实时监控输出结果的情况下非常有用。改参数主要用于解决下述写法不输出日志的问题:

nohup python xxx.py > log 2>&1 & 

2.crontab 配置 

*/2 * * * * source ~/.bash_profile && cd $base_path && sh cron_protect.sh >> ./log/cron_`date +\%Y\%m\%d`.log 2>&1 &

因为 Flink、Streaming 程序部署在大集群,运行相对稳定所以每 5 min 检查一次,而 python 部署在 linux 机器,容易受机器上其他任务影响,所以 2 min 检查一次。运行后,cron.log 会定时监控 python 程序对应的 pid 是否正常:

四.总结

python 7x24 采用了 While True 的写法,Flink 则是消费了一个 7x24 的 Topic 实现常驻。除此之外,大数据还经常需要监控 Spark 任务的状态,把 yarn-streaming 切换成 yarn 即可。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/198986.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【RT-DETR改进】SIoU、GIoU、CIoU、DIoU、AlphaIoU等二十余种损失函数

一、本文介绍 这篇文章介绍了RT-DETR的重大改进,特别是在损失函数方面的创新。它不仅包括了多种IoU损失函数的改进和变体,如SIoU、WIoU、GIoU、DIoU、EIOU、CIoU,还融合了“Alpha”思想,创造了一系列新的损失函数。这些组合形式的…

Python中使用matplotlib库绘图中如何给图形的图例设置中文字体显示

问题:当使用matplotlib绘图时遇到绘图,图例显示不出来中文字体 解决方式: 1)加载字体管理库 from matplotlib.font_manager import FontProperties 2)设置系统上字体的路径 font FontProperties(fname"C:\\W…

MybatisPlus改造逻辑删除有多方便

MybatisPlus的逻辑删除可以有效保留历史数据。之前没有用逻辑删除的项目&#xff0c;想改造成逻辑删除总共需要几步&#xff1f; 答案&#xff1a;4步搞定 一、修改pom.xml的MybatisPlus版本&#xff08;注意版本兼容性&#xff09; <properties>...<!--<mybatis-…

时尚和美容网站的技术 SEO:提示和最佳实践

如果你对美容和时尚感兴趣&#xff0c;做了一个网站&#xff0c;但不知道如何在上面做技术SEO&#xff1f;此外&#xff0c;时尚和美容网站的技术 SEO 没有任何特别的指南&#xff01; 我们听到了你的声音&#xff01;但首先&#xff0c;请记住&#xff0c;技术性SEO不是在一两…

与珎同行录-开篇-231129

与珎同行录-开篇 珎就是对陪伴并帮助我写代码的AI的昵称 能不能读懂这个绕口令问题呢? 连续的椎体的相邻椎体质心的相邻质心的质心作为当前质心所在的椎体的质心, 该质心的方向代表该椎体的上下方向 如何代码实现呢? 还是没看懂…好吧最终的算法是:

记一次处理大数据而导致的内存溢出问题

问题 订单服务通过MQ进行订单同步时&#xff0c;刚启动可以正常消费&#xff0c;但是跑一会就会卡住&#xff0c;每次都是第8个kafka分区不行再进行消费&#xff0c;其他分区消费的很慢。 现象 首先&#xff0c;CPU超高&#xff0c;达到百分之300多&#xff1b;其次&#xf…

Python内置类属性`__name__`属性的使用教程

更多Python学习内容&#xff1a;ipengtao.com Python中的__name__是一种内置的特殊属性&#xff0c;通常用于判断模块是作为主程序运行还是作为模块被导入。本文将深入讲解__name__属性的用法&#xff0c;通过丰富的示例代码展示其在不同情景下的应用。 模块作为主程序运行 当一…

深入了解Java8新特性-日期时间API:LocalDateTime类

阅读建议 嗨&#xff0c;伙计&#xff01;刷到这篇文章咱们就是有缘人&#xff0c;在阅读这篇文章前我有一些建议&#xff1a; 本篇文章大概22000多字&#xff0c;预计阅读时间长需要20分钟以上。本篇文章的实战性、理论性较强&#xff0c;是一篇质量分数较高的技术干货文章&…

idea创建spring boot项目,java版本只能选择17和21

1.问题描述 java版本为"11.0.20"&#xff0c;idea2023创建spring boot项目时&#xff08;File->Project->Spring Initializr&#xff09;&#xff0c;java版本无法选择11&#xff0c;导致报错&#xff0c;如下图所示&#xff1a; 2.原因 spring2.X版本在2023…

类 —— 友元、常/静态成员函数

类 类的大小 和结构体大小求法一致。但需注意&#xff0c;普通空类也会占用 1 字节大小&#xff0c;因为普通空类可以实例化对象。 而 抽象空类占 4 字节&#xff08;32 位机中&#xff09;&#xff0c;因为抽象空类中含有虚指针&#xff08;含有虚函数的非抽象空类同理&am…

Vue指令之v-html

在Vue中有很多特殊的标签属性&#xff0c;这些属性一般以’v’开头&#xff0c;用于在标签中实现特殊的功能。 例如&#xff0c;当Vue实例的data是一个inner html&#xff0c;我们想在网页上渲染这部分html&#xff0c;如果依然使用之前的{{ variable }}&#xff0c;则只会将i…

排序算法:n个0~1000之间的整数,将他们从大到小排序

上榜理由&#xff1a; 如果没见过这种排序题&#xff0c;可能首先想到的就是常用的排序算法&#xff0c;比如快速排序&#xff0c;归并排序&#xff0c;那如果输入的n足够大&#xff0c;时间复杂度肯定比较高。其实题目0-1000的范围是一个题眼&#xff0c;所以一定有更优的排序…

【鸿蒙应用ArkTS开发系列】- 选择图片、文件和拍照功能实现

文章目录 前言创建多媒体Demo工程创建MediaBean 实体类创建MediaHelper工具类API标记弃用问题动态申请多媒体访问权限实现选择图片显示功能打包测试 前言 在使用App的时候&#xff0c;我们经常会在一些社交软件中聊天时发一些图片或者文件之类的多媒体文件&#xff0c;那在鸿蒙…

网络安全--基于Kali的网络扫描基础技术

文章目录 1. 标准ICMP扫描1.1使用Ping命令1.1.1格式1.1.2实战 1.2使用Nmap工具1.2.1格式1.2.2实战1.2.2.1主机在线1.2.2.2主机不在线 1.3使用Fping命令1.3.1格式1.3.2实战 2. 时间戳查询扫描2.1格式2.2实战 3. 地址掩码查询扫描3.1格式3.2实战 2. TCP扫描2.1TCP工作机制2.2TCP …

拆解按摩器:有意思的按键与LED控制电路,学习借鉴一下!

拆解 外观和配色个人感觉还行,比较青春 拉开拉链&#xff0c;拆开外面的布面&#xff0c;里面还有一层纱面 按键部分使用魔术贴固定 拆开纱面后&#xff0c;看到里面的结构&#xff0c;整体是一个海绵 可以看到如下&#xff0c;电池&#xff0c;按键板&#xff0c;充电线的三条…

【Java】文件路径-绝对路径与相对路径

1、绝对路径与相对路径 先来看一下绝对路径和相对路径的定义&#xff1a; 绝对路径是指完整的描述文件位置的路径就是绝对路径。如Windows系统中的D:\Project\data\test.txt&#xff0c;MAC系统中的/Users/liuwenwen/Desktop/Project/test.txt 相对路径是指相对于当前文件位置…

[操作系统] 面试宝典之~死锁连环系列

文章目录 2.22 什么是死锁2.24 解决死锁的方法死锁的预防死锁的避免死锁的检测死锁的解除 2.22 什么是死锁 在多道程序环境下&#xff0c;多个进程可以竞争有限数量的资源。当一个进程申请资源时&#xff0c;如果这时没有可用资源&#xff0c;那么这个进程进入等待状态。有时&…

什么是高级语言、机器语言、汇编语言?什么是编译和解释?

1、高级语言 计算机程序是一种让计算机执行特定任务的方法。程序是由程序员用一种称为编程语言的特殊语言编写的。编程语言有很多种&#xff0c;例如 C、C、Java、Python 等。这些语言被称为高级语言&#xff0c;因为它们更接近人类的自然语言&#xff0c;而不是计算机能够直接…

【数据结构 —— 二叉树的链式结构实现】

数据结构 —— 二叉树的链式结构实现 1.树的概念及其结构1.1.树概念1.2.树的结构1.3树的相关概念1.4.树的表示1.5. 树在实际中的运用&#xff08;表示文件系统的目录树结构&#xff09; 2.二叉树的概念及其结构2.1二叉树的概念2.2.现实中的二叉树&#xff1a;2.3. 特殊的二叉树…

C++单调向量(栈):好子数组的最大分数

作者推荐 利用广度优先或模拟解决米诺骨牌 题目 给你一个整数数组 nums &#xff08;下标从 0 开始&#xff09;和一个整数 k 。 一个子数组 (i, j) 的 分数 定义为 min(nums[i], nums[i1], …, nums[j]) * (j - i 1) 。一个 好 子数组的两个端点下标需要满足 i < k <…