fix: improve watchdog reliability
This commit is contained in:
@@ -1180,6 +1180,7 @@ PING_TARGETS="$ping_targets"
|
||||
FAIL_THRESHOLD=3
|
||||
DHCP_AFTER_FAILURE=1
|
||||
LOG_FILE="/var/log/cups-watchdog/network.log"
|
||||
MAX_LOG_SIZE_KB=256
|
||||
EOF
|
||||
chmod 600 "$config_dir/network-watchdog.conf"
|
||||
else
|
||||
@@ -1197,6 +1198,7 @@ COMMAND_TIMEOUT=8
|
||||
FAIL_THRESHOLD=2
|
||||
RESTART_COOLDOWN=60
|
||||
LOG_FILE="/var/log/cups-watchdog/print.log"
|
||||
MAX_LOG_SIZE_KB=256
|
||||
EOF
|
||||
chmod 600 "$config_dir/print-watchdog.conf"
|
||||
else
|
||||
@@ -1531,7 +1533,7 @@ main() {
|
||||
success "Avahi 服务已启动并设置开机自启"
|
||||
|
||||
# 8. 安装守护脚本
|
||||
install_watchdogs
|
||||
install_watchdogs || warn "守护脚本安装失败,请稍后重新运行安装脚本或手动检查 watchdog 目录"
|
||||
|
||||
# 更新IP地址(如果配置了静态IP)
|
||||
LOCAL_IP=$(get_ip)
|
||||
@@ -1577,6 +1579,9 @@ main() {
|
||||
echo -e " ${GREEN} ${NC} 配置目录: /etc/cups-watchdog/"
|
||||
echo -e " ${GREEN} ${NC} 日志目录: /var/log/cups-watchdog/"
|
||||
echo ""
|
||||
else
|
||||
echo -e " ${YELLOW}[守护脚本]${NC} 未检测到已启用状态,请检查安装日志"
|
||||
echo ""
|
||||
fi
|
||||
echo -e " ${YELLOW}下一步:${NC}"
|
||||
echo " 1. 用浏览器打开上面的地址"
|
||||
|
||||
@@ -24,6 +24,7 @@ PING_TARGETS="223.5.5.5 114.114.114.114"
|
||||
FAIL_THRESHOLD=3
|
||||
DHCP_AFTER_FAILURE=1
|
||||
LOG_FILE="/var/log/cups-watchdog/network.log"
|
||||
MAX_LOG_SIZE_KB=256
|
||||
|
||||
if [ -f "$CONFIG_FILE" ]; then
|
||||
# shellcheck disable=SC1090
|
||||
@@ -33,9 +34,29 @@ fi
|
||||
mkdir -p "$STATE_DIR"
|
||||
mkdir -p "$(dirname "$LOG_FILE")" 2>/dev/null || true
|
||||
|
||||
acquire_lock() {
|
||||
local lock_dir="$STATE_DIR/network.lock"
|
||||
|
||||
if ! mkdir "$lock_dir" 2>/dev/null; then
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') [network-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') [network-watchdog] $msg"
|
||||
echo "$line"
|
||||
echo "$line" >> "$LOG_FILE" 2>/dev/null || true
|
||||
@@ -223,8 +244,22 @@ configure_static() {
|
||||
}
|
||||
|
||||
connectivity_ok() {
|
||||
local iface
|
||||
local gateway
|
||||
local target
|
||||
|
||||
iface="$(detect_interface)"
|
||||
if [ -n "$iface" ] && [ -f "/sys/class/net/$iface/carrier" ]; then
|
||||
if [ "$(cat "/sys/class/net/$iface/carrier" 2>/dev/null || echo 0)" != "1" ]; then
|
||||
return 1
|
||||
fi
|
||||
fi
|
||||
|
||||
gateway="$(ip route show default 2>/dev/null | awk '{print $3; exit}')"
|
||||
if [ -n "$gateway" ] && ping -c 1 -W 2 "$gateway" >/dev/null 2>&1; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
for target in $PING_TARGETS; do
|
||||
[ -n "$target" ] || continue
|
||||
if ping -c 1 -W 2 "$target" >/dev/null 2>&1; then
|
||||
@@ -260,12 +295,15 @@ check_network() {
|
||||
|
||||
case "${1:-check}" in
|
||||
check)
|
||||
acquire_lock
|
||||
check_network
|
||||
;;
|
||||
dhcp)
|
||||
acquire_lock
|
||||
configure_dhcp
|
||||
;;
|
||||
static)
|
||||
acquire_lock
|
||||
configure_static
|
||||
;;
|
||||
*)
|
||||
|
||||
@@ -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