监控 Jenkins agent 是否存活的脚本

发表时间 2020-12-07
阅读1分钟

Jenkins 的 agent 是运行在 slave 节点上的一个 java进程,用于接收 master 的指令,并执行动作。agent 一旦停止运行,Jenkins 上的所有指令都不能正常执行。所以会需要一个定时任务,检查 agent 是否存活。

crontab 写法

首先看看 crontab 内容,类似 这一节 中的例子

# crontab
SHELL=/bin/bash
PATH=/home/yourname/jdk/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin

20 * * * * /home/yourname/monitor_agent.sh

上面这个 crontab 脚本指定了每小时的第20分钟,执行健康检查任务。需要注意的是:

  • 脚本使用绝对路径 由于 这个原因 ,调用的脚本使用绝对路径

  • PATH 变量 Jenkins agent 是一个 java进程,需要事先指定 JDK 的路径。由于 这个原因 ,首先设置了运行时的 PATH 环境变量;后面添加的一连串路径是为了余下其他脚本中使用命令( psgrep 等)能正常执行。

监控脚本

上节 crontab 里调用了一个 monitor_agent.sh 脚本用于监控 agent 进程,内容如下:

#!/bin/bash
# monitor_agent.sh
AGENT_PID=$(ps -ef | grep agent.jar | grep -v grep)

if [ -z "${AGENT_PID}" ]; then
  /home/yourname/start_agent.sh
fi

这个 monitor_agent.sh 脚本从进程列表中找出 agent.jar 的名字,如果不存在就执行启动 agent 的脚本。在执行前,需要为 monitor_agent.sh 增加可执行属性:

$ chmod +x /home/yourname/monitor_agent.sh

启动脚本

上节 监控脚本 里调用的 start_agent.sh 则是 Jenkins 提供的启动命令,类似如下的命令:

#!/bin/bash
# start_agent.sh
nohup java -jar agent.jar -jnlpUrl ....
本站是个人博客。除非特别说明,所有文章均系原创,并采用 署名协议 CC-BY 授权。
欢迎转载,惟请保留原文链接:/tech/jenkins-agent-monitoring/