저는 bash 스크립팅이 처음이므로 양해해 주시기 바랍니다.
거의 매초 로그를 파일로 인쇄하는 프로그램이 있습니다. 현재 시간이 파일의 마지막 수정 시간보다 몇 분 이상 지난 경우 다시 시작하고 싶습니다.
답변1
시도해 보고 로그에 표시하려는 시계열을 명령으로 일치시킨 grep
다음 반환 값에 따라 서비스를 다시 시작할지 여부를 확인할 수 있습니다.
그런 다음 이 스크립트를 작업 일정에 맞게 구성 crond
하거나systemd.timer
┌──[[email protected]]-[~/ansible/k8s-pod-create]
└─$grep Pod demo.yaml
kind: Pod
┌──[[email protected]]-[~/ansible/k8s-pod-create]
└─$echo $?
0
┌──[[email protected]]-[~/ansible/k8s-pod-create]
└─$grep pod demo.yaml
┌──[[email protected]]-[~/ansible/k8s-pod-create]
└─$echo $?
1
참고로 사용할 수 있는 데모 구현 입니다 python
. 서비스가 다시 시작되지는 않지만 알림 메시지가 나타납니다.
# -*- encoding: utf-8 -*-
"""
@File : ipcc_log_mis.py
@Time : 2022/10/13 17:27:15
@Author : Li Ruilong
@Version : 1.0
@Contact : [email protected]
@Desc : IPCC日志监控
如果日志文件不存在,或者当天的日志没有,会发送告警短信
"""
# here put the import lib
import subprocess
parser = argparse.ArgumentParser(description='简单的日志监控:如果命令失败或者不是成功状态码,执行对应的操作')
try:
com = 'tail -n 10 /home/****/RecordUser.log | grep -i $(date +%m-%d)'
out_bytes = subprocess.check_output(com, shell=True)
out_bytes = out_bytes.decode('utf-8')
# print out_bytes
except subprocess.CalledProcessError as e:
out_bytes = e.output # Output generated before error
line = 'mysql -h 192.168.50.187 -P 3306 -u PT90 ************* --database cloud -A -e"{sql}" > /dev/null 2>&1'
sql = "insert into nm_sms_send (accNbr,smsContent,spId) values ('181****5370','【XX平台】IPCC 日志异常,监控不到当天日志。请排查,$(date)',1);"
sql += "insert into nm_sms_send (accNbr,smsContent,spId) values ('153****7834','【XX平台】IPCC 日志异常,监控不到当天日志。请排查,$(date)',1);"
line = line.format(sql=sql)
subprocess.check_output(line, shell=True)