debian

如何在Debian上监控FTPServer状态

小樊
37
2025-11-18 10:54:03
栏目: 智能运维

在 Debian 上监控 FTPServer 状态

一 快速检查与日志定位

二 资源与性能监控

三 持续监控与告警方案

四 一键健康检查脚本示例

#!/usr/bin/env bash
set -Eeuo pipefail

FTP_HOST="${1:-127.0.0.1}"
FTP_PORT="${2:-21}"
WARN=3
CRIT=5
FROM="ftp-monitor@$(hostname)"
TO="${3:-admin@example.com}"
SUBJ_OK="[OK] FTP ${FTP_HOST}:${FTP_PORT} healthy"
SUBJ_FAIL="[FAIL] FTP ${FTP_HOST}:${FTP_PORT} check failed"
TMP_ERR=$(mktemp)

cleanup() { rm -f "$TMP_ERR"; }
trap cleanup EXIT

check_service() {
  if ! systemctl is-active --quiet vsftpd; then
    echo "CRITICAL: vsftpd is not running" >&2
    return 1
  fi
}

check_port() {
  if ! ss -lntp | grep -q ":${FTP_PORT}"; then
    echo "CRITICAL: port ${FTP_PORT} not listening" >&2
    return 1
  fi
}

check_login() {
  local user="${4:-ftp}"
  local pass="${5:-}"
  local timeout=10
  if command -v lftp >/dev/null 2>&1; then
    if lftp -u "$user,$pass" -p "$FTP_PORT" -e "quit" "ftp://${FTP_HOST}" >/dev/null 2>&1; then
      echo "OK: login as ${user} succeeded"
      return 0
    else
      echo "CRITICAL: login as ${user} failed" >&2
      return 1
    fi
  else
    echo "WARNING: lftp not installed, skip login test" >&2
    return 0
  fi
}

main() {
  local errors=0
  check_service || ((errors++))
  check_port || ((errors++))
  check_login "$@" || ((errors++))

  if (( errors == 0 )); then
    echo "$SUBJ_OK"
    exit 0
  elif (( errors <= WARN )); then
    echo "$SUBJ_FAIL: $errors issue(s)" >&2
    exit 1
  else
    echo "$SUBJ_FAIL: $errors issue(s)" >&2
    exit 2
  fi
}

main "$@"

0
看了该问题的人还看了