生产环境shell脚本监控

本文介绍使用Shell脚本实现定时任务的方法,包括监控指定目录下的文件数量并进行清理,以及检查特定进程的状态并重启,确保系统的稳定运行。

最近有个需求:定时检测某个目录下的文件个数是否超过n个,若超过则清理日期较早的m-1个文件;由于第一个文件可能被有些进程占用,因此删除日期较早的前m个除去最早的一个

具体的shell脚本如下:

############################
# author : lijd
# date   :  2021-04-20
############################

#!/bin/bash

main()
{
	while [ 1 ]
	do
		datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/"
		filepath="/data/sp"$datapath
		file_num=`ls "/data/sp"$datapath -l | grep ".dq" | wc -l`
		
		if [ $file_num -gt 15 ]
		then
			cd $filepath && ls -ltr | grep  ".dq" | awk '{print $9}' | head -n 10 | tail -n 9 | xargs rm -rf
		fi
		
		sleep 60
	done
}

main

主要执行语句:ls -ltr | grep  ".dq" | awk '{print $9}' | head -n 10 | tail -n 9 | xargs rm -rf

定时检测某个进程是否存在,不存在启动。具体的shell脚本如下:

############################
# author : lijd
# date   :  2021-04-20
############################

#!/bin/bash

main()
{
	while [ 1 ]
	do
		process_num=`ps aux | grep hqccgsvc | grep -v grep |wc -l`
		if [ $process_num -eq 0 ]
		then
			cd /root/ccg_cvi/ccg/ && ./hqccgsvc -start
			
			nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
			echo $nowtime hqccgsvc segfault >> /root/ccg_cvi/cvi_ccg_monitor.log
		fi
		
		sleep 60
	done
}

main

部分数据文件可能导致进程读取崩溃,删除异常的数据文件然后重启进程。具体的shell脚本如下: 

############################
# author : lijd
# date   :  2021-04-20
############################
#!/bin/bash

BakErrFile()
{
    datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/"
    filepath="/data/sp"$datapath
    file_num=`ls "/data/sp"$datapath -l | grep ".dq" | wc -l`
	
    if [ $file_num -gt 5 ]
    then
	cd $filepath && ls -ltr | grep  ".dq" | awk '{print $9}' | head -n 1 | xargs -t -i mv {} {}.bak
    fi
}

main()
{
    while [ 1 ]
    do
	process_ccg_num=`ps aux | grep hqccgsvc | grep -v grep |wc -l`
	if [ $process_ccg_num -eq 0 ]
	then
	    cd /root/ccg_cvi/ccg/ && ./hqccgsvc -start
			
	    nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
	    echo $nowtime hqccgsvc segfault >> /root/ccg_cvi/cvi_ccg_monitor.log
        fi
		
	process_sp_num=`ps aux | grep spsvc_analyze | grep -v grep |wc -l`
	if [ $process_sp_num -eq 0 ]
	then
	    cd /root/ccg_cvi/spanalyze/ && ./spsvc_analyze -start
			
	    nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
	    echo $nowtime spsvc_analyze segfault >> /root/ccg_cvi/cvi_ccg_monitor.log
	fi
		
	process_spa_num=`ps aux | grep spasvc_analyze | grep -v grep |wc -l`
	if [ $process_spa_num -eq 0 ]
	then
	    BakErrFile
	    cd /root/ccg_cvi/spanalyze/ && ./spasvc_analyze -start
			
	    nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
	    echo $nowtime spasvc_analyze segfault >> /root/ccg_cvi/cvi_ccg_monitor.log
	fi
		
	sleep 60
    done
}

main

主要执行语句:ls -ltr | grep  ".dq" | awk '{print $9}' | head -n 1 | xargs -t -i mv {} {}.bak

检查当天对应的文件夹是否存在,如果存在并检查其最新修改时间,如果条件不满足则重启系统。具体的shell脚本如下: 

############################
# author : lijd
# date   :  2024-10-30
############################
#!/bin/bash

main()
{
	systemstarttime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
	echo "$systemstarttime info : adasMonitor start ~~~" >> /usr/local/adasMonitor.log
	while [ 1 ]; do
		# 获取当前时间
		nowtime=`date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"`
		
		# 获取系统启动时间的时间戳(单位:秒)
		systemuptime=$(printf "%.0f" $(cat /proc/uptime | cut -d" " -f1))
				
		# 获取adas附件服务连接数
		adas_connect_num=`netstat -anp| grep 10011 | grep ESTABLISHED| wc -l`
		
		# 如果系统重启时间超过1天且ADAS连接数超过1才能进入监控
		if [ $systemuptime -gt 86400 ] && [ $adas_connect_num -gt 1 ]; then
		
			datapath=$(date +%Y)"/"$(date +%m)"/"$(date +%d)"/"
			filepath="/data/media/"$datapath
			echo "$nowtime info : filepath : $filepath" >> /usr/local/adasMonitor.log
			
			# 获取当前时间
			current_time=$(date +%s)
			
			if [ -d "$filepath" ]; then
				# 获取文件夹最后修改时间
				last_modified=$(stat -c %Y "$filepath")
				
				# 计算时间差(单位:秒)
				time_diff=$((current_time - last_modified))
				
				echo "$nowtime info : $filepath last modified --> nowtime : $time_diff" >> /usr/local/adasMonitor.log
				
				# 文件夹更新时间超30分钟
				if [ $time_diff -gt 1800 ]; then
					echo "$nowtime error : $filepath last modified --> nowtime : $time_diff" >> /usr/local/adasMonitor.log
					sudo reboot;
				fi
			else
				echo "$nowtime warning : $filepath is not exit!" >> /usr/local/adasMonitor.log
				
				# 获取今天0点0分0秒的时间戳
				midnight_timestamp=$(date -d "today 00:00:00" +%s)
				
				# 计算时间差(单位:秒)
				time_diff=$((current_time - midnight_timestamp))
				
				# 判断时间差是否大于10分钟
				if [ $time_diff -gt 600 ]; then
					echo "$nowtime error : $filepath is not exit and great 600 seconds!" >> /usr/local/adasMonitor.log
					sudo reboot;
				fi
			fi
		fi
		
		sleep 3600
	
	done
}
 
main
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值