![如果几分钟没有更新文件,如何重新启动命令](https://linux22.com/image/213107/%E5%A6%82%E6%9E%9C%E5%87%A0%E5%88%86%E9%92%9F%E6%B2%A1%E6%9C%89%E6%9B%B4%E6%96%B0%E6%96%87%E4%BB%B6%EF%BC%8C%E5%A6%82%E4%BD%95%E9%87%8D%E6%96%B0%E5%90%AF%E5%8A%A8%E5%91%BD%E4%BB%A4.png)
我对 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
一个demo的实现,可以作为参考,这里没有重启服务,但是出现了一条提醒短信
# -*- 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)