数分間ファイルが更新されなかった場合にコマンドを再起動する方法

数分間ファイルが更新されなかった場合にコマンドを再起動する方法

私は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)

おすすめ記事