2026-09-23 14:26:05 +09:00

45 lines
1.0 KiB
Bash
Executable File

#!/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