IT源码网

cron检测并启动logstash

xmjava 2021年02月13日 程序员 393 0

背景

线上的logstash总是莫名其妙的挂了,我打算写一个定时任务,一分钟去检查一次logstash进程,不存在时就把它启动

步骤

  1. 编写检测启动脚本
  2. 让cron定时来调用检测启动脚本

1、编写脚本

第一次完成是这个样子:

#!/usr/bin/env bash 
 
 
pid_blog=`ps -ef|grep 'org.logstash.Logstash' |grep -v grep|awk '{print $2}'` 
if [ "$pid_blog" == "" ]; 
then 
    echo "now time is $(date +'%Y-%m-%d %H:%M:%S.%s')" 
    nohup /home/logstash/logstash-6.4.2/bin/logstash -f /home/logstash/logstash-6.4.2/config/logstash.conf >> /data-big-1/logstash//logstash.log 2>&1 & 
    echo "已将logstash启动" 
else 
    echo "端口未被占用" 
fi 

后来发现cron无法启动logstash,原因是cron执行时没有对应的系统环境变量,例如:没有java环境

进一步优化:
使用 env 命令查看系统变量,然后将系统变量 export 进我的脚本中

优化后的脚本:

#!/usr/bin/env bash 
export XDG_SESSION_ID=485047 
export HOSTNAME=log-platform-tx-es-03 
export TERM=xterm 
export SHELL=/bin/bash 
export JRE_HOME=/opt/jdk1.8.0_211/jdk1.8.0_211/jre 
export USER=logstash 
export CLASS_PATH=.:/opt/jdk1.8.0_211/lib/dt.jar:/opt/jdk1.8.0_211/lib/tools.jar:/opt/jdk1.8.0_211/jdk1.8.0_211/jre/lib 
export PATH=/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/jdk1.8.0_211/bin:/opt/jdk1.8.0_211/jdk1.8.0_211/jre/bin 
export PWD=/home/logstashscripts 
export JAVA_HOME=/opt/jdk1.8.0_211 
export LANG=en_US.UTF-8 
export SHLVL=5 
 
pid_blog=`ps -ef|grep 'org.logstash.Logstash' |grep -v grep|awk '{print $2}'` 
if [ "$pid_blog" == "" ]; 
then 
    echo "now time is $(date +'%Y-%m-%d %H:%M:%S.%s')" 
    nohup /home/logstash/logstash-6.4.2/bin/logstash -f /home/logstash/logstash-6.4.2/config/logstash.conf >> /data-big-1/logstash//logstash.log 2>&1 & 
    echo "已将logstash启动" 
else 
    echo "端口未被占用" 
fi 

2、cron 每一分钟调用一次脚本

1、crontab -e 编辑任务

2、添加任务如下

*/1 * * * * flock -xn /tmp/logstash_start.lock -c '/home/logstashscripts/logstash_start.sh >> /home/logstashscripts/logstash_start.log 2>&1' 

参考文档:
https://blog.csdn.net/sum__mer/article/details/83387994

https://askubuntu.com/questions/23009/why-crontab-scripts-are-not-working

评论关闭
IT源码网

微信公众号号:IT虾米 (左侧二维码扫一扫)欢迎添加!

在idea中编写自动拉取、编译、启动springboot项目的shell脚本