45 lines
1.0 KiB
Bash
Executable File
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
|