---
title: "Theo dõi stickiness IP proxy tĩnh bằng cron / systemd timer (curl + cảnh báo)"
url: https://memory.wiki/UoTEt_tq
updated: 2026-09-28T20:28:27.719Z
source: "api"
---
# Theo dõi stickiness IP proxy tĩnh bằng cron / systemd timer (curl + cảnh báo)

Proxy tĩnh kỳ vọng exit IP không đổi giữa các lần gọi. Trong thực tế, bạn vẫn nên có lớp giám sát nhẹ: script định kỳ lấy IP qua proxy, so với IP kỳ vọng, và cảnh báo khi lệch. Bài này dựng monitor bằng `curl` + cron hoặc systemd timer — phù hợp VPS Linux vận hành proxy dân cư Việt Nam.

## Vì sao cần monitor stickiness?

- Whitelist phía đối tác gắn với một IP: nếu IP đổi im lặng, job production gãy.
- Nhiều môi trường (staging/prod) dễ trỏ nhầm credential.
- On-call cần biết sớm trước khi khách hàng báo lỗi.
- Audit: lưu lịch sử IP theo thời gian để đối chiếu sự cố.

## Thông số tham chiếu

Proxy tĩnh dân cư VN: **1.000đ/ngày**, **30.000đ/30 ngày**; Viettel / VNPT / FPT; HTTP hoặc SOCKS5; mạng dân cư thật, IP sạch. [xem bảng giá](https://proxyviet.org/proxy-tinh). Checker thủ công: [check-proxy](https://proxyviet.org/check-proxy).

## Script monitor

Tạo `/usr/local/bin/proxy-stickiness-check.sh`:

```bash
#!/usr/bin/env bash
set -euo pipefail

# Đọc secret từ file chỉ root đọc được
# /etc/proxyviet/proxy.env:
#   PROXY_URL=http://USER:PASS@HOST:PORT
#   EXPECTED_EXIT_IP=x.x.x.x
#   ALERT_WEBHOOK=https://hooks.example/xxx   # tuỳ chọn
#   STATE_FILE=/var/lib/proxyviet/last_ip
source /etc/proxyviet/proxy.env

mkdir -p "$(dirname "${STATE_FILE:-/var/lib/proxyviet/last_ip}")"
STATE_FILE="${STATE_FILE:-/var/lib/proxyviet/last_ip}"
LOG_TAG="proxy-stickiness"

ip="$(curl -fsS -x "$PROXY_URL" --max-time 25 https://api.ipify.org || true)"
if [[ -z "$ip" ]]; then
  logger -t "$LOG_TAG" "FAIL: không lấy được IP qua proxy"
  if [[ -n "${ALERT_WEBHOOK:-}" ]]; then
    curl -fsS -X POST -H 'Content-Type: application/json' \
      -d '{"text":"proxy-stickiness: curl IP thất bại"}' \
      "$ALERT_WEBHOOK" || true
  fi
  exit 1
fi

logger -t "$LOG_TAG" "exit_ip=$ip"

if [[ -n "${EXPECTED_EXIT_IP:-}" && "$ip" != "$EXPECTED_EXIT_IP" ]]; then
  msg="ALERT: IP lệch kỳ vọng got=$ip expected=$EXPECTED_EXIT_IP"
  logger -t "$LOG_TAG" "$msg"
  if [[ -n "${ALERT_WEBHOOK:-}" ]]; then
    curl -fsS -X POST -H 'Content-Type: application/json' \
      -d "{\"text\":\"$msg\"}" "$ALERT_WEBHOOK" || true
  fi
  echo "$ip" > "$STATE_FILE"
  exit 2
fi

# Cảnh báo nếu IP đổi so với lần trước (kể cả khi chưa set EXPECTED)
if [[ -f "$STATE_FILE" ]]; then
  prev="$(cat "$STATE_FILE")"
  if [[ -n "$prev" && "$prev" != "$ip" ]]; then
    msg="ALERT: IP đổi $prev -> $ip"
    logger -t "$LOG_TAG" "$msg"
    if [[ -n "${ALERT_WEBHOOK:-}" ]]; then
      curl -fsS -X POST -H 'Content-Type: application/json' \
        -d "{\"text\":\"$msg\"}" "$ALERT_WEBHOOK" || true
    fi
  fi
fi

echo "$ip" > "$STATE_FILE"
exit 0
```

```bash
sudo chmod 750 /usr/local/bin/proxy-stickiness-check.sh
sudo mkdir -p /etc/proxyviet /var/lib/proxyviet
sudo install -m 600 /dev/stdin /etc/proxyviet/proxy.env <<'ENV'
PROXY_URL=http://USER:PASS@HOST:PORT
EXPECTED_EXIT_IP=x.x.x.x
ALERT_WEBHOOK=
STATE_FILE=/var/lib/proxyviet/last_ip
ENV
```

Chạy thử:

```bash
sudo /usr/local/bin/proxy-stickiness-check.sh; echo exit:$?
journalctl -t proxy-stickiness -n 20 --no-pager
```

## Cron

```cron
# mỗi 15 phút
*/15 * * * * root /usr/local/bin/proxy-stickiness-check.sh
```

Đặt vào `/etc/cron.d/proxy-stickiness`.

## systemd timer (khuyến nghị hơn cron trên distro mới)

`/etc/systemd/system/proxy-stickiness.service`:

```ini
[Unit]
Description=Check static proxy exit IP stickiness
After=network-online.target
Wants=network-online.target

[Service]
Type=oneshot
ExecStart=/usr/local/bin/proxy-stickiness-check.sh
Nice=10
```

`/etc/systemd/system/proxy-stickiness.timer`:

```ini
[Unit]
Description=Run proxy stickiness check every 15 minutes

[Timer]
OnBootSec=2min
OnUnitActiveSec=15min
AccuracySec=1min
Unit=proxy-stickiness.service

[Install]
WantedBy=timers.target
```

```bash
sudo systemctl daemon-reload
sudo systemctl enable --now proxy-stickiness.timer
systemctl list-timers | grep proxy-stickiness
```

## Gợi ý cảnh báo

- Webhook Slack / Discord / Telegram bot (POST JSON đơn giản như trên).
- Hoặc chỉ dựa `journald` + monitoring agent (Promtail, Vector) filter `ALERT:`.
- Không gửi mật khẩu proxy trong payload alert.

## Kết hợp checker thủ công

Khi alert nổ:

1. Chạy lại script tay.
2. `curl -x ... https://api.ipify.org` và mở [check-proxy](https://proxyviet.org/check-proxy) trên máy có cùng credential.
3. Đối chiếu panel — gia hạn / đổi IP nếu nhà cung cấp đã cấp IP mới, rồi cập nhật `EXPECTED_EXIT_IP` và whitelist đối tác.

## Tóm tắt

Một script bash + cron/systemd timer đủ để biết sớm khi exit IP của proxy tĩnh lệch kỳ vọng. Giữ secret trong file `0600`, log IP thôi, và [xem bảng giá](https://proxyviet.org/proxy-tinh) khi cần chọn lại gói HTTP/SOCKS5 Viettel/VNPT/FPT phù hợp hạ tầng.

