Shell 脚本监控 Logstash 进程

自从上次 Log4j2 的漏洞问题升级了 Logstash 之后,每到凌晨🕛 2 点,进程就会挂掉,那段时间会有一个日志切割的操作导致文件不可读,因此写了一个脚本通过 crontab 来监控进程是否存在:

#! /bin/bash

process=$1
pid=$(ps -ef | grep 进程名称 | grep -v grep | awk '{print $2}')
if [ ! -n "$pid" ]
then
   echo "logstash is not running"   
   else
      echo "$pid is running"
#     echo "logstash fail"
#     curl 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=xxxx' \
#       -H 'Content-Type: application/json' \
#       -d '
#       {
#             "msgtype": "text",
#             "text": {
#                 "content": "正式环境 Logstash 进程异常,请排查。",
#                 "mentioned_list": ["@all"]
#             }
#       }'
fi

刚开始我的进程名称填的一直是 logstash ,然而每次 kill 掉进程后,依旧能输出 2 个进程号,但是如果手动查询进程号的话输出就是空,最后通过查询 Java 进程来变相达成目的。挖个坑,后续了解一下 shell 相关的知识。