自从上次 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 相关的知识。