首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >码头工人-五旬节数据集成(pdi)的健康检查

码头工人-五旬节数据集成(pdi)的健康检查
EN

Stack Overflow用户
提问于 2021-08-03 22:46:24
回答 2查看 642关注 0票数 1

我正在建立我的自定义pdi图像使用码头。我可以建立形象和运行它没有任何问题。现在,我需要为我的pdi容器添加健康检查,有人能给我建议一个健康检查命令吗?

我试着用,

代码语言:javascript
复制
healthcheck:
      test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $? || exit 1 

但是给出了一个错误,如,ERROR: Invalid interpolation format for "healthcheck" option in service "pentaho": "/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $? || exit 1"

如果我像下面这样使用healthcheck命令,它就变成了、不健康的,即使没有任何错误。

代码语言:javascript
复制
healthcheck:
      test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic || exit 1 

如果我从码头检查containerID那里找到的话,

  • 我不使用点菜或任何东西或任何用途。我只是解压缩pdi压缩文件,并希望按照给定的时间表运行我的pdi作业。我的entrypoint.sh文件如下,
代码语言:javascript
复制
#!/bin/sh
## entrypoint.sh
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
tail -f /dev/null

当我手动运行作业文件并检查回送$时?如果作业成功,它提供0作为输出。如何正确使用它在码头-撰写健康检查?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2021-08-05 02:15:55

找到pdi容器的健康检查,我会在这里张贴,因为这可以帮助其他人。

基本上,当一个作业执行时没有任何错误,它返回0作为退出代码。但是,当出现错误时,它通常返回1作为退出代码,就像我发现的那样。

因此,检查所需的pdi作业执行命令的退出代码状态,并将其用于健康检查,如下所示,

创建healthcheck.sh文件并将其复制到容器中(在这里,我将其复制到容器内的/home/script/ path )。

代码语言:javascript
复制
#!/bin/sh
set -e

## execute job 
/home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
 
## Job executed without errors? Use exit status of the job command ##
if [ $? -eq 0 ]
then
  echo "Success"
  exit 0
else
  echo "Failure" >&2
  exit 1
fi

然后在healthcheck.sh中运行docker-compose.yml文件(使用2.3docker-Compose.yml版本)

代码语言:javascript
复制
healthcheck:
      test: ./home/scripts/healthcheck.sh
      interval: 55s
      timeout: 50s
      retries: 3
      start_period: 9m

注:

  • 确保在使用docker-compose.yml Dockerfile将chmod +x文件复制到容器后,在运行文件或更改健康检查命令为,
代码语言:javascript
复制
healthcheck:
      test: chmod +x /home/scripts/healthcheck.sh && ./home/scripts/healthcheck.sh
      interval: 55s
      timeout: 50s
      retries: 3
      start_period: 9m
  • 对于我的码头映像,我解压缩了pdi-ce-9.1.0.0-324.zip文件,并重复使用entrypoint.sh文件执行作业文件,以作为计划来执行ETL过程。使用java:8-jre-alpine映像解压缩它。
  • 新entrypoint.sh根据@TheQueenIsDead的建议进行编辑,同时循环无限运行pdi作业,
代码语言:javascript
复制
#!/bin/sh
## entrypoint.sh
while :
do
    /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic
    sleep 120
done

参考资料:

票数 1
EN

Stack Overflow用户

发布于 2021-08-04 01:04:57

作为一个新用户,我还不能评论,所以我希望这个答案能给你一些思考。

思想食粮

根据有关健康检查的Docker文档,格式如下:https://docs.docker.com/engine/reference/builder/#healthcheck

我不太熟悉您的应用程序,但是如果需要启动,那么设置一个延迟来给容器初始化时间可能会有帮助。

我还看到,您在入口点脚本中使用的命令与用于健康检查的命令相同。

健康检查通常不应与正在运行的进程相同,而应用于确保正在运行的进程正常工作。文档和这个博客一样强调了这一点,详细说明了如何通过点击服务器来检查web应用程序是否还活着。

另一个注意事项是,如果入口点尾dev为null,则不会通过docker logs获取正在运行的进程的日志。如果您想安排一个任务经常在容器中运行,我建议将您的命令包装在一个调用命令的while循环中,或者使用外部调度器,比如Kubernetes Cron Jobs (编辑:甚至在调用docker run的主机上使用crontab )。

修复

最后,如果您只是简单地修复了当前的格式化问题,则需要在健康检查中转义$字符,如下所示:

代码语言:javascript
复制
      test: /home/data-integration/kitchen.sh -file="/home/jobs/my.kjb" -level=Basic && echo $$? || exit 1

与此类似的其他问题包括:我怎样才能逃过码头撰写文件中的美元签名呢?

它链接到变量转义上的文档,在这里:https://docs.docker.com/compose/compose-file/compose-file-v3/#variable-substitution

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68643554

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档