#!/usr/bin/env bash LOGCHECK_BIN="/usr/sbin/logcheck" STATEDIR="/var/lib/logcheck" LOGFILE="$STATEDIR/my-logcheck.log" OFFSETFILE="$STATEDIR/my-offset.journal" IS_TESTMODE=0 # テストモード指定の確認 for arg in "$@"; do if [ "$arg" = "-t" ]; then IS_TESTMODE=1 break fi done # 前回実行時刻を取得 if [ -f "$OFFSETFILE" ]; then OFFSETTIME="--since=@$(stat -c %Y "$OFFSETFILE")" else OFFSETTIME="--since=-5h" fi # ログファイルを待避 if [ -f "$LOGFILE" ]; then mv -f "$LOGFILE" "$LOGFILE.1" fi # ジャーナルログから警告以上のログを抽出 LASTTIME=$(date +"%Y-%m-%d %H:%M:%S") journalctl -p warning..emerg --quiet "$OFFSETTIME" >> "$LOGFILE" 2>&1 # Logcheckを実行 "$LOGCHECK_BIN" "$@" LOGCHECK_EXITCODE=$? # Logcheckが正常終了したら実行時刻を更新 if [ $LOGCHECK_EXITCODE -eq 0 ]; then if [ $IS_TESTMODE -eq 0 ]; then touch -d "$LASTTIME" "$OFFSETFILE" fi else echo "E: my-logcheck: logcheck exited with error status $LOGCHECK_EXITCODE. Offset not updated." >&2 exit $LOGCHECK_EXITCODE fi