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/bashdat=`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" ];thenecho "$appname $time ok"
elif [ "$appnum" -eq "0" ];thensh killAndRerun.shsendMail
elseecho "任务存在多个实例"appId=`yarn --config /data0/yarn-streaming application -list | grep $appname| awk '{print $1}'`arr=(${appId// / })for i in ${arr[@]}doyarn --config /data0/yarn-streaming application -kill $iecho 'kill' $idonesh killAndRerun.shsendMail
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/bashcd $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 即可。
相关文章:
Shell - cron_protect.sh 监控 Python、Streaming 程序
目录 一.引言 二.Flink 程序监控 1.shell 脚本 2.crontab 配置 三.Python 程序监控 1.shell 脚本 2.crontab 配置 四.总结 一.引言 业务有流式处理数据的需求,需要 7x24 通过 Flink Python 程序进行处理。为了监控 Flink 与 Python 的程序运行状态并在程…...
MSB3541 Files 的值“<<<<<<< HEAD”无效。路径中具有非法字符。
MSB3541 Files 的值“<<<<<<< HEAD”无效。路径中具有非法字符。 一般来说出现这个问题是因为使用git版本控制工具合并代码出现了问题,想要解决也很简单。 如图点击错误后定位到文件,发现也没有什么问题。 根据错误后边的提示&a…...
【赠书第9期】巧用ChatGPT高效搞定Excel数据分析
文章目录 前言 1 操作步骤 1.1 数据清理和整理 1.2 公式和函数的优化 1.3 图表和可视化 1.4 数据透视表的使用 1.5 条件格式化和筛选 1.6 数据分析技巧 1.7 自动化和宏的创建 2 推荐图书 3 粉丝福利 前言 ChatGPT 是一个强大的工具,可以为你提供在 Exce…...
会声会影2024旗舰版系统配置要求及格式支持
会声会影2024旗舰版是一款广受欢迎的视频编辑软件,它的最新版本,会声会影2023,已经发布。在这篇文章中,我们将探讨会声会影2024旗舰版系统配置要求及格式支持 会声会影2024是一款专业的视频剪辑软件,能够帮助用户制作高…...
【部署运维】docker:入门到进阶
0 前言 部署运维博客系列一共有三篇: 拥抱开源,将工作中的经验分享出来,尽量避免新手踩坑。 【部署运维】docker:入门到进阶 【部署运维】kubernetes:容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…...
鸿蒙开发学习——应用程序框架
文章目录 UIAbility的生命周期Create状态WindowStageCreateForeground和Background前后台展示控制onWindowStageDestroyDestory 总结 UIAbility的生命周期 感觉这里他讲的不清晰,UIAbility的4个声明周期是Create、Foreground(桌面展示)、Back…...
Linux dd命令详解:如何从标准输入或文件中读取、转换并输出数据(附实例教程和注意事项)
Linux dd命令介绍 Linux dd命令用于读取、转换并输出数据。dd可以从标准输入或文件中读取数据,根据指定的格式来转换数据,再输出到文件、设备或标准输出。这个命令在备份硬盘、创建启动盘、数据恢复等场景中非常有用。 Linux dd命令适用的Linux版本 d…...
Python——常见内置模块
Python 模块(Modules)1、概念模块函数类变量2、分类3、模块导入的方法:五种4、使用import 导入模块5、使用from……import部分导入6、使用as关键字为导入模块或功能命名别名7、模块的搜索目录8、自定义模块 常见内置模块一、math模块二、rand…...
JAVA毕业设计112—基于Java+Springboot+Vue的宠物领养社区小程序(源码+数据库)
基于JavaSpringbootVue的宠物领养社区小程序(源码数据库)112 一、系统介绍 本系统前后端分离带小程序 小程序(用户端),后台管理系统(管理员) 小程序: 登录、注册、宠物领养、发布寻宠、发布领养、宠物社…...
golang log模块使用
在Go中,log 包是用于输出日志信息的标准库。以下是一些基本的 log 包的使用示例: 基本用法: package mainimport ("log" )func main() {log.Println("This is a log message.") } 运行程序,你会在控制台看到日…...
软件开发中的抓大放小vs极致细节思维
最近在开发过程中,遇到了好多次 “这个需求点这次要不要做?” 的问题, 主要有两方阵营,比如以研发主导的 “这次先不做、等必要的时候再做” ,另外一方是以PM主导的 “这个不做需求不完整,可能影响用户体验…...
java文件上传以及使用阿里云OSS
JavaWeb 文件上传本地存储阿里云OSS配置文件 yml配置文件 文件上传 前端页面三要素: 表单项type“file” 表单提交方式post 表单的enctype属性multipart/form-data 本地存储 保证上传的文件不重复 //获取原始文件名String originalFilename image.getOriginalFi…...
相关性分析和作图
相关的类型 1. Pearson、Spearman和Kendall相关 Pearson 积差相关系数衡量了两个定量变量之间的线性相关程度。(连续) Spearman等级相关系数则衡量分级定序变量之间的相关程度。(分类) Kendall’s Tau 相关系数也是一种非参数的…...
AlphaFold的原理及解读
1、背景 蛋白质是生物体内一类重要的生物大分子,其结构复杂多样,蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看,蛋白质的结构可以分为四个层次:初级结构、二级结构、三级结构和四级结构。 初级结…...
【ChatGLM3-6B】Docker下快速部署
【ChatGLM2-6B】小白入门及Docker下部署 前提下载安装包网盘地址 开始安装加载镜像启动镜像进入容器启动模型交互页面访问页面地址 前提 安装好了docker安装好了NVIDIA显卡16G 下载安装包 网盘地址 这里因为网盘上传文件有大小限制,所以使用了分卷压缩的方式…...
两部手机数据传输后备忘录不见了怎么回事
想必很多人都遇到过,当两部手机进行备忘录数据传输后,突然发现备忘录不见了,这让人不禁着急上火,我也曾经遇到过这种事情导致很多重要的内容都丢失了。 一般出现这种情况可能是因为,两部手机使用的是不同的云服务&…...
【Unity入门】LayerMask小结
LayerMask常用的几种方法 LayerMask.GetMask 根据 层名称 获取其层遮罩值 遮罩值 2^层索引 假设 UserLayerA 和 UserLayerB 是第十层和第十一层。 这两个层会具有 User Layer 值 10 和 11。若要获取其层遮罩值, 可以将其名称传入 GetMask。参数可以是 其名称的列…...
mysql按年、季度、月,统计
以下是按年、按季度和按月统计SQL查询语句: 按年统计: SELECTds.checker,YEAR(ds.create_time) AS settleYear,SUM(ds.quantity) AS quantity,SUM(ds.approval_price) AS approvalPrice FROMdata_settle ds WHEREds.delete_flag 0AND ds.approval_sta…...
Python的换行和转义:深入理解代码排版与字符串处理
更多Python学习内容:ipengtao.com 大家好,我是涛哥,今天为大家分享 Python的换行和转义:深入理解代码排版与字符串处理,全文2700字,阅读大约8分钟。 在Python编程中,正确使用换行和转义字符是保…...
dart多线程双向通信的案例----【小学4年级课程】
下面是运行后的打印顺序 I/flutter (20170): 上班 I/flutter (20170): 这里是校长室:main I/flutter (20170): 这里是饭堂:fantang1 I/flutter (20170): 这里是收发室--检查小孩发回去给他妈妈的信息是:我是秘书的儿子,我来到在校长室了。校长今晚想吃羊…...
变量 varablie 声明- Rust 变量 let mut 声明与 C/C++ 变量声明对比分析
一、变量声明设计:let 与 mut 的哲学解析 Rust 采用 let 声明变量并通过 mut 显式标记可变性,这种设计体现了语言的核心哲学。以下是深度解析: 1.1 设计理念剖析 安全优先原则:默认不可变强制开发者明确声明意图 let x 5; …...
C++_核心编程_多态案例二-制作饮品
#include <iostream> #include <string> using namespace std;/*制作饮品的大致流程为:煮水 - 冲泡 - 倒入杯中 - 加入辅料 利用多态技术实现本案例,提供抽象制作饮品基类,提供子类制作咖啡和茶叶*//*基类*/ class AbstractDr…...
基于FPGA的PID算法学习———实现PID比例控制算法
基于FPGA的PID算法学习 前言一、PID算法分析二、PID仿真分析1. PID代码2.PI代码3.P代码4.顶层5.测试文件6.仿真波形 总结 前言 学习内容:参考网站: PID算法控制 PID即:Proportional(比例)、Integral(积分&…...
无法与IP建立连接,未能下载VSCode服务器
如题,在远程连接服务器的时候突然遇到了这个提示。 查阅了一圈,发现是VSCode版本自动更新惹的祸!!! 在VSCode的帮助->关于这里发现前几天VSCode自动更新了,我的版本号变成了1.100.3 才导致了远程连接出…...
srs linux
下载编译运行 git clone https:///ossrs/srs.git ./configure --h265on make 编译完成后即可启动SRS # 启动 ./objs/srs -c conf/srs.conf # 查看日志 tail -n 30 -f ./objs/srs.log 开放端口 默认RTMP接收推流端口是1935,SRS管理页面端口是8080,可…...
C++ 求圆面积的程序(Program to find area of a circle)
给定半径r,求圆的面积。圆的面积应精确到小数点后5位。 例子: 输入:r 5 输出:78.53982 解释:由于面积 PI * r * r 3.14159265358979323846 * 5 * 5 78.53982,因为我们只保留小数点后 5 位数字。 输…...
mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包
文章目录 现象:mysql已经安装,但是通过rpm -q 没有找mysql相关的已安装包遇到 rpm 命令找不到已经安装的 MySQL 包时,可能是因为以下几个原因:1.MySQL 不是通过 RPM 包安装的2.RPM 数据库损坏3.使用了不同的包名或路径4.使用其他包…...
3-11单元格区域边界定位(End属性)学习笔记
返回一个Range 对象,只读。该对象代表包含源区域的区域上端下端左端右端的最后一个单元格。等同于按键 End 向上键(End(xlUp))、End向下键(End(xlDown))、End向左键(End(xlToLeft)End向右键(End(xlToRight)) 注意:它移动的位置必须是相连的有内容的单元格…...
智能分布式爬虫的数据处理流水线优化:基于深度强化学习的数据质量控制
在数字化浪潮席卷全球的今天,数据已成为企业和研究机构的核心资产。智能分布式爬虫作为高效的数据采集工具,在大规模数据获取中发挥着关键作用。然而,传统的数据处理流水线在面对复杂多变的网络环境和海量异构数据时,常出现数据质…...
如何在网页里填写 PDF 表格?
有时候,你可能希望用户能在你的网站上填写 PDF 表单。然而,这件事并不简单,因为 PDF 并不是一种原生的网页格式。虽然浏览器可以显示 PDF 文件,但原生并不支持编辑或填写它们。更糟的是,如果你想收集表单数据ÿ…...

