使用process_monitor.sh监控hadoop进程的crontab配置

本文深入探讨了过程监控脚本process_monitor.sh的工作原理,包括监控特定进程、重启策略及自动化重启机制。通过配置cron任务,实现对关键服务如HDFS、HBase、Zookeeper等的稳定运行监控,确保在进程异常退出后能迅速恢复。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

可以从下列链接找到process_monitor.sh:
https://github.com/eyjian/mooon/blob/master/common_library/shell/process_monitor.sh

假设:
1) java安装目录为/data/jdk
2) 监控脚本process_monitor监控脚本process_monitor.sh安装目录为/usr/local/bin
3) hadoop安装目录为/data/hadoop
4) hbase安装目录为/data/hbase
5) zookeeper安装目录为/data/zookeeper

可以通过jps查看到进程ID,然后使用kill命令杀死进程,查看监控重拉起效果。
process_monitor.sh每隔2秒(由变量monitor_interval指定)检查一次,发现进程不存在时,立即启动。
假设运行用户为root,则process_monitor.sh的日志文件为/tmp/process_monitor-root.log,
假设运行用户为test,则process_monitor.sh的日志文件为/tmp/process_monitor-test.log,以此类推。
可以通过tail -f观察process_monitor.sh的日志,来了解process_monitor.sh的运行。

process_monitor.sh带两个参数,第一个参数是被监控的进程对象,process_monitor.sh依靠第二个参数重启被监控对象。
第一个参数又分两部分,第一个空格前的部分,和空格之后的部分。
第一部分为被监控对象的进程名称,对于java程序,进程名是java,而不是jar包的名称。
第二部分为参数部分,可有可无,但正是通过它来区分不同的被监控对象,对于java、shell程序等是必须的。
另外,process_monitor.sh对参数部分是采取模糊部分匹配方式。
可以通过ps aux命令来确定进程名称和参数。

crontab配置如下:
# 监控HDFS NameNode
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_namenode" "/data/hadoop/sbin/hadoop-daemon.sh start namenode"
# 监控HDFS切换主备NameNode程序
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_zkfc" "/data/hadoop/sbin/hadoop-daemon.sh start zkfc"
# 监控HDFS JournalNode
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_journalnode" "/data/hadoop/sbin/hadoop-daemon.sh start journalnode"
# 监控HDFS DataNode
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_datanode" "/data/hadoop/sbin/hadoop-daemon.sh start datanode"
# 监控HBase Master
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_master" "/data/hbase/bin/hbase-daemon.sh start master"
# 监控HBase thrift2
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_thrift2" "/data/hbase/bin/hbase-daemon.sh start thrift2 --framed -nonblocking"
# 监控ZooKeeper
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dzookeeper" "/data/zookeeper/bin/zkServer.sh start"
# 监控HBase regionserver
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_regionserver" "/data/hbase/bin/hbase-daemon.sh start regionserver"
# 监控YARN ResourceManager
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_resourcemanager" "/data/hadoop/sbin/yarn-daemon.sh start resourcemanager"
# 监控YARN NodeManager
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java -Dproc_nodemanager" "/data/hadoop/sbin/yarn-daemon.sh start nodemanager"
# 监控HiveServer
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java HiveServer2" "/data/gongyi/hive/bin/hiveserver2 &"
# 监控Hive MetaStore
* * * * * /usr/local/bin/process_monitor.sh "/data/jdk/bin/java HiveMetaStore" "/data/gongyi/hive/bin/hive --service metastore &"


### 使用 `process_monitor.sh` 脚本监控 Hadoop 进程 为了有效监控Hadoop集群中的各个进程,可以编写并使用名为 `process_monitor.sh` 的Shell脚本来定期检查这些服务的状态。此脚本能够帮助管理员确保像DataNode这样的重要组件正常运行。 #### 配置方法 创建一个新的shell脚本文件命名为 `process_monitor.sh` 并赋予执行权限: ```bash touch /usr/local/bin/process_monitor.sh chmod +x /usr/local/bin/process_monitor.sh ``` 编辑该脚本,在其中加入如下代码片段来定义基本功能: ```bash #!/bin/bash # 设置日志位置 LOGFILE="/var/log/hadoop/daemon-process-monitor.log" # 获取当前日期时间戳用于记录日志 timestamp() { date +"%Y-%m-%d %T" } # 检查指定的服务是否正在运行 check_service_running(){ local service_name=$1 if ! pgrep -f $service_name > /dev/null; then echo "$(timestamp): Service ${service_name} is not running, attempting to restart..." >> "$LOGFILE" # 尝试重启服务 case "${service_name}" in "datanode") su hdfs -c '/opt/hadoop/current/sbin/hadoop-daemon.sh start datanode' >> "$LOGFILE" 2>&1 ;; *) echo "$(timestamp): Unknown service name provided." >> "$LOGFILE";; esac sleep 5s if pgrep -f $service_name > /dev/null ;then echo "$(timestamp): Successfully restarted the ${service_name}." >> "$LOGFILE" else echo "$(timestamp): Failed to restart the ${service_name}, please check manually." >> "$LOGFILE" fi else echo "$(timestamp): The ${service_name} is already running." >> "$LOGFILE" fi } ``` 上述脚本实现了对特定名称的服务状态监测逻辑,并尝试自动恢复任何停止的服务实例[^1]。 #### 常用参数说明 虽然这个简单的例子并没有直接接受外部输入作为启动参数,但是可以通过修改函数调用来适应不同的需求。例如要增加灵活性可以在脚本顶部添加一些变量声明以便于调整行为: ```bash SERVICE_NAME="datanode" # 默认监控的数据节点服务名 INTERVAL=60 # 循环间隔秒数,默认每分钟一次 MAX_RETRIES=3 # 失败重试次数上限 ``` 之后可以根据实际情况更改这些值或者通过命令行传递给脚本以动态设定它们。对于更复杂的场景,则可能需要进一步增强脚本的功能,比如支持更多类型的Hadoop守护程序、集成报警机制等。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值