当前位置: 首页 > news >正文

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版本控制工具合并代码出现了问题&#xff0c;想要解决也很简单。 如图点击错误后定位到文件&#xff0c;发现也没有什么问题。 根据错误后边的提示&a…...

【赠书第9期】巧用ChatGPT高效搞定Excel数据分析

文章目录 前言 1 操作步骤 1.1 数据清理和整理 1.2 公式和函数的优化 1.3 图表和可视化 1.4 数据透视表的使用 1.5 条件格式化和筛选 1.6 数据分析技巧 1.7 自动化和宏的创建 2 推荐图书 3 粉丝福利 前言 ChatGPT 是一个强大的工具&#xff0c;可以为你提供在 Exce…...

会声会影2024旗舰版系统配置要求及格式支持

会声会影2024旗舰版是一款广受欢迎的视频编辑软件&#xff0c;它的最新版本&#xff0c;会声会影2023&#xff0c;已经发布。在这篇文章中&#xff0c;我们将探讨会声会影2024旗舰版系统配置要求及格式支持 会声会影2024是一款专业的视频剪辑软件&#xff0c;能够帮助用户制作高…...

【部署运维】docker:入门到进阶

0 前言 部署运维博客系列一共有三篇&#xff1a; 拥抱开源&#xff0c;将工作中的经验分享出来&#xff0c;尽量避免新手踩坑。 【部署运维】docker&#xff1a;入门到进阶 【部署运维】kubernetes&#xff1a;容器集群管理掌握这些就够了 【部署运维】pythonredisceleryd…...

鸿蒙开发学习——应用程序框架

文章目录 UIAbility的生命周期Create状态WindowStageCreateForeground和Background前后台展示控制onWindowStageDestroyDestory 总结 UIAbility的生命周期 感觉这里他讲的不清晰&#xff0c;UIAbility的4个声明周期是Create、Foreground&#xff08;桌面展示&#xff09;、Back…...

Linux dd命令详解:如何从标准输入或文件中读取、转换并输出数据(附实例教程和注意事项)

Linux dd命令介绍 Linux dd命令用于读取、转换并输出数据。dd可以从标准输入或文件中读取数据&#xff0c;根据指定的格式来转换数据&#xff0c;再输出到文件、设备或标准输出。这个命令在备份硬盘、创建启动盘、数据恢复等场景中非常有用。 Linux dd命令适用的Linux版本 d…...

Python——常见内置模块

Python 模块&#xff08;Modules&#xff09;1、概念模块函数类变量2、分类3、模块导入的方法&#xff1a;五种4、使用import 导入模块5、使用from……import部分导入6、使用as关键字为导入模块或功能命名别名7、模块的搜索目录8、自定义模块 常见内置模块一、math模块二、rand…...

JAVA毕业设计112—基于Java+Springboot+Vue的宠物领养社区小程序(源码+数据库)

基于JavaSpringbootVue的宠物领养社区小程序(源码数据库)112 一、系统介绍 本系统前后端分离带小程序 小程序&#xff08;用户端&#xff09;&#xff0c;后台管理系统&#xff08;管理员&#xff09; 小程序&#xff1a; 登录、注册、宠物领养、发布寻宠、发布领养、宠物社…...

golang log模块使用

在Go中&#xff0c;log 包是用于输出日志信息的标准库。以下是一些基本的 log 包的使用示例&#xff1a; 基本用法&#xff1a; package mainimport ("log" )func main() {log.Println("This is a log message.") } 运行程序&#xff0c;你会在控制台看到日…...

软件开发中的抓大放小vs极致细节思维

最近在开发过程中&#xff0c;遇到了好多次 “这个需求点这次要不要做&#xff1f;” 的问题&#xff0c; 主要有两方阵营&#xff0c;比如以研发主导的 “这次先不做、等必要的时候再做” &#xff0c;另外一方是以PM主导的 “这个不做需求不完整&#xff0c;可能影响用户体验…...

java文件上传以及使用阿里云OSS

JavaWeb 文件上传本地存储阿里云OSS配置文件 yml配置文件 文件上传 前端页面三要素&#xff1a; 表单项type“file” 表单提交方式post 表单的enctype属性multipart/form-data 本地存储 保证上传的文件不重复 //获取原始文件名String originalFilename image.getOriginalFi…...

相关性分析和作图

相关的类型 1. Pearson、Spearman和Kendall相关 Pearson 积差相关系数衡量了两个定量变量之间的线性相关程度。&#xff08;连续&#xff09; Spearman等级相关系数则衡量分级定序变量之间的相关程度。&#xff08;分类&#xff09; Kendall’s Tau 相关系数也是一种非参数的…...

AlphaFold的原理及解读

1、背景 蛋白质是生物体内一类重要的生物大分子&#xff0c;其结构复杂多样&#xff0c;蛋白质的结构对于理解其功能和参与的生物学过程具有重要意义。从生物学角度上看&#xff0c;蛋白质的结构可以分为四个层次&#xff1a;初级结构、二级结构、三级结构和四级结构。 初级结…...

【ChatGLM3-6B】Docker下快速部署

【ChatGLM2-6B】小白入门及Docker下部署 前提下载安装包网盘地址 开始安装加载镜像启动镜像进入容器启动模型交互页面访问页面地址 前提 安装好了docker安装好了NVIDIA显卡16G 下载安装包 网盘地址 ​ 这里因为网盘上传文件有大小限制&#xff0c;所以使用了分卷压缩的方式…...

两部手机数据传输后备忘录不见了怎么回事

想必很多人都遇到过&#xff0c;当两部手机进行备忘录数据传输后&#xff0c;突然发现备忘录不见了&#xff0c;这让人不禁着急上火&#xff0c;我也曾经遇到过这种事情导致很多重要的内容都丢失了。 一般出现这种情况可能是因为&#xff0c;两部手机使用的是不同的云服务&…...

【Unity入门】LayerMask小结

LayerMask常用的几种方法 LayerMask.GetMask 根据 层名称 获取其层遮罩值 遮罩值 2^层索引 假设 UserLayerA 和 UserLayerB 是第十层和第十一层。 这两个层会具有 User Layer 值 10 和 11。若要获取其层遮罩值&#xff0c; 可以将其名称传入 GetMask。参数可以是 其名称的列…...

mysql按年、季度、月,统计

以下是按年、按季度和按月统计SQL查询语句&#xff1a; 按年统计&#xff1a; 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学习内容&#xff1a;ipengtao.com 大家好&#xff0c;我是涛哥&#xff0c;今天为大家分享 Python的换行和转义&#xff1a;深入理解代码排版与字符串处理&#xff0c;全文2700字&#xff0c;阅读大约8分钟。 在Python编程中&#xff0c;正确使用换行和转义字符是保…...

dart多线程双向通信的案例----【小学4年级课程】

下面是运行后的打印顺序 I/flutter (20170): 上班 I/flutter (20170): 这里是校长室:main I/flutter (20170): 这里是饭堂:fantang1 I/flutter (20170): 这里是收发室--检查小孩发回去给他妈妈的信息是&#xff1a;我是秘书的儿子&#xff0c;我来到在校长室了。校长今晚想吃羊…...

Linux应用开发之网络套接字编程(实例篇)

服务端与客户端单连接 服务端代码 #include <sys/socket.h> #include <sys/types.h> #include <netinet/in.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <arpa/inet.h> #include <pthread.h> …...

基于Uniapp开发HarmonyOS 5.0旅游应用技术实践

一、技术选型背景 1.跨平台优势 Uniapp采用Vue.js框架&#xff0c;支持"一次开发&#xff0c;多端部署"&#xff0c;可同步生成HarmonyOS、iOS、Android等多平台应用。 2.鸿蒙特性融合 HarmonyOS 5.0的分布式能力与原子化服务&#xff0c;为旅游应用带来&#xf…...

2021-03-15 iview一些问题

1.iview 在使用tree组件时&#xff0c;发现没有set类的方法&#xff0c;只有get&#xff0c;那么要改变tree值&#xff0c;只能遍历treeData&#xff0c;递归修改treeData的checked&#xff0c;发现无法更改&#xff0c;原因在于check模式下&#xff0c;子元素的勾选状态跟父节…...

ElasticSearch搜索引擎之倒排索引及其底层算法

文章目录 一、搜索引擎1、什么是搜索引擎?2、搜索引擎的分类3、常用的搜索引擎4、搜索引擎的特点二、倒排索引1、简介2、为什么倒排索引不用B+树1.创建时间长,文件大。2.其次,树深,IO次数可怕。3.索引可能会失效。4.精准度差。三. 倒排索引四、算法1、Term Index的算法2、 …...

css3笔记 (1) 自用

outline: none 用于移除元素获得焦点时默认的轮廓线 broder:0 用于移除边框 font-size&#xff1a;0 用于设置字体不显示 list-style: none 消除<li> 标签默认样式 margin: xx auto 版心居中 width:100% 通栏 vertical-align 作用于行内元素 / 表格单元格&#xff…...

Java面试专项一-准备篇

一、企业简历筛选规则 一般企业的简历筛选流程&#xff1a;首先由HR先筛选一部分简历后&#xff0c;在将简历给到对应的项目负责人后再进行下一步的操作。 HR如何筛选简历 例如&#xff1a;Boss直聘&#xff08;招聘方平台&#xff09; 直接按照条件进行筛选 例如&#xff1a…...

Angular微前端架构:Module Federation + ngx-build-plus (Webpack)

以下是一个完整的 Angular 微前端示例&#xff0c;其中使用的是 Module Federation 和 npx-build-plus 实现了主应用&#xff08;Shell&#xff09;与子应用&#xff08;Remote&#xff09;的集成。 &#x1f6e0;️ 项目结构 angular-mf/ ├── shell-app/ # 主应用&…...

基于Java+MySQL实现(GUI)客户管理系统

客户资料管理系统的设计与实现 第一章 需求分析 1.1 需求总体介绍 本项目为了方便维护客户信息为了方便维护客户信息&#xff0c;对客户进行统一管理&#xff0c;可以把所有客户信息录入系统&#xff0c;进行维护和统计功能。可通过文件的方式保存相关录入数据&#xff0c;对…...

Qemu arm操作系统开发环境

使用qemu虚拟arm硬件比较合适。 步骤如下&#xff1a; 安装qemu apt install qemu-system安装aarch64-none-elf-gcc 需要手动下载&#xff0c;下载地址&#xff1a;https://developer.arm.com/-/media/Files/downloads/gnu/13.2.rel1/binrel/arm-gnu-toolchain-13.2.rel1-x…...

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的----NTFS源代码分析--重要

根目录0xa0属性对应的Ntfs!_SCB中的FileObject是什么时候被建立的 第一部分&#xff1a; 0: kd> g Breakpoint 9 hit Ntfs!ReadIndexBuffer: f7173886 55 push ebp 0: kd> kc # 00 Ntfs!ReadIndexBuffer 01 Ntfs!FindFirstIndexEntry 02 Ntfs!NtfsUpda…...