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