fix: improve watchdog reliability
This commit is contained in:
@@ -18,6 +18,7 @@ COMMAND_TIMEOUT=8
|
||||
FAIL_THRESHOLD=2
|
||||
RESTART_COOLDOWN=60
|
||||
LOG_FILE="/var/log/cups-watchdog/print.log"
|
||||
MAX_LOG_SIZE_KB=256
|
||||
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
@@ -27,9 +28,29 @@ fi
|
||||
mkdir -p "$STATE_DIR"
|
||||
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null || true
|
||||
|
||||
acquire_lock() {
|
||||
local lock_dir="$STATE_DIR/print.lock"
|
||||
|
||||
if ! mkdir "$lock_dir" 2>/dev/null; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') [print-watchdog] another run is active"
|
||||
exit 0
|
||||
fi
|
||||
trap 'rmdir "$lock_dir" 2>/dev/null || true' EXIT
|
||||
}
|
||||
|
||||
rotate_log() {
|
||||
local max_bytes=$((MAX_LOG_SIZE_KB * 1024))
|
||||
|
||||
if [ -f "$LOG_FILE" ] && [ "$(wc -c < "$LOG_FILE" 2>/dev/null || echo 0)" -gt "$max_bytes" ]; then
|
||||
mv "$LOG_FILE" "$LOG_FILE.1" 2>/dev/null || true
|
||||
: > "$LOG_FILE"
|
||||
fi
|
||||
}
|
||||
|
||||
log_msg() {
|
||||
local msg="$1"
|
||||
local line
|
||||
rotate_log
|
||||
line="$(date '+%Y-%m-%d %H:%M:%S') [print-watchdog] $msg"
|
||||
echo "$line"
|
||||
echo "$line" >> "$LOG_FILE" 2>/dev/null || true
|
||||
@@ -150,9 +171,11 @@ check_print_stack() {
|
||||
|
||||
case "${1:-check}" in
|
||||
check)
|
||||
acquire_lock
|
||||
check_print_stack
|
||||
;;
|
||||
restart)
|
||||
acquire_lock
|
||||
restart_print_stack
|
||||
;;
|
||||
*)
|
||||
|
||||
Reference in New Issue
Block a user