Chcesz dostawać alerty z Zabbix prosto na telefon? Masz dość sprawdzania maili z monitoringu? ntfy.sh to darmowy serwis powiadomień push, który wysyła alerty z serwera Linux bezpośrednio na smartfon – bez rejestracji, bez konfiguracji SMTP, bez opłat za SMS.
Powiadomienia push z serwera na telefon – zarówno przez integrację z Zabbix, jak i w własnych skryptach bash.
Czym jest ntfy i jak działa?
ntfy (czytaj: „notify”) to darmowy serwis powiadomień push oparty o prosty protokół HTTP. Zamiast konfigurować serwer SMTP czy płacić za bramkę SMS, wysyłasz jedno żądanie curl:
curl -d "Backup zakończony" ntfy.sh/moj-serwer-xyz123
Jedna komenda = powiadomienie push na telefonie. Bez konta, bez tokena, bez konfiguracji serwera.
Bajecznie proste do zastosowania praktycznie we wszytkim.
Dlaczego ntfy zamiast powiadomień email czy SMS?
| Metoda | Opóźnienie | Koszt | Konfiguracja |
|---|---|---|---|
| 1-15 minut | Darmowy | Wymaga SMTP | |
| SMS (smsapi, twilio) | Sekundy | ~0.07 PLN/sms | API + konto |
| ntfy | Sekundy | Darmowy | Tylko curl |
Dla administratora serwera Linux czy VPS to game changer – alerty ze serwera na smartfon bez żadnych kosztów i konfiguracji.
Konfiguracja aplikacji mobilnej
- Pobierz aplikację ntfy:
- Android: Google Play lub F-Droid
- iOS: App Store
- Kliknij + i wpisz nazwę tematu (np.
serwer-prod-x7k9m2) - Gotowe – każdy POST na
ntfy.sh/serwer-prod-x7k9m2ląduje na telefonie
Ważne: Używaj losowych nazw tematów! Tematy są publiczne – kto zna nazwę, może subskrybować.
Integracja ntfy z Zabbix – powiadomienia push zamiast email
Standardowe powiadomienia Zabbix przez email są wolne i często ignorowane. SMS-y kosztują. ntfy daje natychmiastowe alerty na telefon za darmo.
Krok 1: Skrypt alertów dla Zabbix
Sprawdź katalog alertscripts:
grep AlertScriptsPath /etc/zabbix/zabbix_server.conf
# Domyślnie: /usr/lib/zabbix/alertscripts
Utwórz plik /usr/lib/zabbix/alertscripts/ntfy.sh:
#!/bin/bash
# ========== KONFIGURACJA ==========
# Wpisz własną, unikalną nazwę tematu!
NTFY_TOPIC="zabbix-TWOJ-UNIKALNY-STRING"
# ==================================
TO="$1"
SUBJECT="$2"
MESSAGE="$3"
# Mapowanie severity Zabbix na priorytety ntfy
case "$SUBJECT" in
*Disaster*|*DISASTER*)
PRIORITY="urgent"
TAGS="rotating_light,disaster"
;;
*High*|*HIGH*)
PRIORITY="high"
TAGS="warning,high"
;;
*Average*|*AVERAGE*)
PRIORITY="default"
TAGS="orange_circle,average"
;;
*Warning*|*WARNING*)
PRIORITY="low"
TAGS="yellow_circle,warning"
;;
*OK*|*Resolved*)
PRIORITY="low"
TAGS="white_check_mark,resolved"
;;
*)
PRIORITY="default"
TAGS="bell"
;;
esac
# Wysłanie powiadomienia push
curl -s \
-H "Title: ${SUBJECT}" \
-H "Priority: ${PRIORITY}" \
-H "Tags: ${TAGS}" \
-d "${MESSAGE}" \
"https://ntfy.sh/${NTFY_TOPIC}"
exit 0
Nadaj uprawnienia:
chmod +x /usr/lib/zabbix/alertscripts/ntfy.sh
chown zabbix:zabbix /usr/lib/zabbix/alertscripts/ntfy.sh
Test (jako user zabbix):
sudo -u zabbix /usr/lib/zabbix/alertscripts/ntfy.sh "" "[HIGH] Test alert" "Testowe powiadomienie z Zabbix"
Krok 2: Media Type w Zabbix
Alerts → Media types → Create media type
| Parametr | Wartość |
|---|---|
| Name | ntfy |
| Type | Script |
| Script name | ntfy.sh |
| Script parameters | {ALERT.SENDTO} |
{ALERT.SUBJECT} | |
{ALERT.MESSAGE} |
Krok 3: Trigger Action
Alerts → Actions → Trigger actions → Create action
Zakładka Action:
- Name:
Powiadomienia push ntfy - Conditions:
Trigger severity >= Warning
Zakładka Operations:
Default subject:
[{TRIGGER.SEVERITY}] {HOST.NAME}: {TRIGGER.NAME}
Default message:
Host: {HOST.NAME}
Problem: {TRIGGER.NAME}
Severity: {TRIGGER.SEVERITY}
Czas: {EVENT.DATE} {EVENT.TIME}
W sekcji Operations → Add:
- Send to users: wybierz użytkowników
- Send only to:
ntfy
Zakładka Recovery operations – analogicznie dla powiadomień o rozwiązaniu problemu.
Krok 4: Media dla użytkownika
Users → [Twój user] → Media → Add
| Pole | Wartość |
|---|---|
| Type | ntfy |
| Send to | default |
| Enabled | ✓ |
Gotowe! Zabbix wykrywa problem → push notification leci na telefon.
Powiadomienia push w skryptach Bash
ntfy idealnie nadaje się do alertów ze skryptów – backup, monitoring dysku, cronjob, deployment.
Alert po zakończeniu backupu
#!/bin/bash
NTFY_TOPIC="backup-serwer-abc123"
notify() {
curl -s \
-H "Title: $1" \
-H "Priority: $2" \
-H "Tags: $3" \
-d "$4" \
"https://ntfy.sh/${NTFY_TOPIC}"
}
notify "Backup started" "low" "arrow_forward" "Rozpoczynam backup na $(hostname)"
if tar -czf /backup/data-$(date +%Y%m%d).tar.gz /data 2>/tmp/backup.err; then
SIZE=$(ls -lh /backup/data-$(date +%Y%m%d).tar.gz | awk '{print $5}')
notify "✅ Backup OK" "default" "white_check_mark" "Rozmiar: ${SIZE}"
else
notify "❌ Backup FAILED" "urgent" "x" "Błąd: $(cat /tmp/backup.err)"
exit 1
fi
Monitoring miejsca na dysku
Alert gdy dysk się zapełnia – klasyczny przypadek użycia dla administratora VPS:
#!/bin/bash
# Cron: */30 * * * * /usr/local/bin/disk-check.sh
NTFY_TOPIC="monitoring-xyz789"
THRESHOLD=85
df -h | grep -vE '^Filesystem|tmpfs|cdrom' | awk '{print $5 " " $6}' | while read output; do
usage=$(echo $output | awk '{print $1}' | sed 's/%//')
partition=$(echo $output | awk '{print $2}')
if [ $usage -ge $THRESHOLD ]; then
curl -s \
-H "Title: ⚠️ Brak miejsca na dysku" \
-H "Priority: high" \
-H "Tags: warning,disk" \
-d "Partycja $partition zapełniona w ${usage}% na $(hostname)" \
"https://ntfy.sh/${NTFY_TOPIC}"
fi
done
Alert o logowaniu SSH
Powiadomienie push gdy ktoś loguje się na serwer – przydatne do monitorowania bezpieczeństwa:
Utwórz /usr/local/bin/ssh-notify.sh:
#!/bin/bash
[ "$PAM_TYPE" != "open_session" ] && exit 0
curl -s \
-H "Title: 🔐 SSH: ${PAM_USER}@$(hostname)" \
-H "Priority: high" \
-H "Tags: lock,ssh" \
-d "User: ${PAM_USER}
Z adresu: ${PAM_RHOST}
Czas: $(date '+%Y-%m-%d %H:%M:%S')" \
"https://ntfy.sh/ssh-TWOJ-TOPIC"
exit 0
chmod +x /usr/local/bin/ssh-notify.sh
Dodaj na końcu /etc/pam.d/sshd:
session optional pam_exec.so /usr/local/bin/ssh-notify.sh
Uniwersalna funkcja do skryptów
Dodaj do ~/.bashrc lub /etc/profile.d/ntfy.sh:
export NTFY_TOPIC="moj-serwer-default"
ntfy() {
local msg="$1"
local title="${2:-Alert}"
local priority="${3:-default}"
curl -s \
-H "Title: ${title}" \
-H "Priority: ${priority}" \
-d "${msg}" \
"https://ntfy.sh/${NTFY_TOPIC}"
}
ntfy-ok() { ntfy "$1" "✅ ${2:-OK}" "default"; }
ntfy-warn() { ntfy "$1" "⚠️ ${2:-Warning}" "high"; }
ntfy-error() { ntfy "$1" "❌ ${2:-Error}" "urgent"; }
Użycie:
ntfy "Zadanie zakończone" "Mój skrypt"
ntfy-ok "Deployment finished"
ntfy-error "Baza danych nie odpowiada" "DB Alert"
Priorytety powiadomień
| Priorytet | Header | Efekt na telefonie |
|---|---|---|
| Minimalny | min | Ciche, bez wibracji |
| Niski | low | Bez dźwięku |
| Normalny | default | Standardowe powiadomienie |
| Wysoki | high | Dźwięk + wysoki priorytet |
| Pilny | urgent | Przebija tryb „nie przeszkadzać” |
Dla alertów Zabbix z severity Disaster używaj urgent – telefon zadzwoni nawet w nocy.
Tagi i emoji
Tagi zamieniają się na emoji w powiadomieniu:
curl -H "Tags: warning,server,fire" -d "CPU 98%!" ntfy.sh/moj-topic
Przydatne tagi: warning ⚠️, white_check_mark ✅, x ❌, rotating_light 🚨, fire 🔥, computer 💻, lock 🔒
Akcja po kliknięciu
Link otwierany po tapnięciu w powiadomienie:
curl \
-H "Click: https://zabbix.firma.pl/tr_events.php?eventid=${EVENT_ID}" \
-H "Title: Problem na serwerze" \
-d "Kliknij aby otworzyć w Zabbix" \
ntfy.sh/zabbix-alerts
Limity publicznego serwera ntfy.sh
| Parametr | Limit |
|---|---|
| Wiadomości dziennie | 250 per IP |
| Rozmiar załącznika | 15 MB |
| Retencja | 12 godzin |
Dla typowego monitoringu serwera VPS to więcej niż wystarczy.
Podsumowanie
ntfy.sh to najprostszy sposób na powiadomienia push z serwera Linux na telefon:
- Zero konfiguracji – tylko curl
- Natychmiastowe alerty – push w sekundę
- Integracja z Zabbix – 10 minut i działa
- Działa w skryptach bash – jedna linijka kodu
- Darmowy – bez rejestracji, bez limitu który boli
- W dokumentacji znajdziecie wszysto. jak tego użyć od Basha aż do Powershell
Koniec sprawdzania maili. Ustaw ntfy, telefon Cię powiadomi.
Linki:
- Strona: ntfy.sh
- Dokumentacja: docs.ntfy.sh
- GitHub: github.com/binwiederhier/ntfy
FAQ ntfy.sh
ntfy (czytaj: notify) to darmowy, otwartoźródłowy serwis powiadomień push oparty o protokół HTTP. Umożliwia wysyłanie alertów z serwera Linux, skryptów bash, systemów monitoringu (Zabbix, Prometheus, Uptime Kuma) oraz aplikacji webowych — bezpośrednio na smartfon z Androidem lub iOS. Nie wymaga rejestracji, konfiguracji SMTP ani żadnych opłat. Wystarczy jedna komenda curl, aby otrzymać powiadomienie push na telefonie w ciągu kilku sekund. ntfy działa w modelu publish-subscribe: subskrybujesz wybrany temat (topic) w aplikacji mobilnej, a następnie wysyłasz na niego wiadomości z dowolnego urządzenia. Projekt jest rozwijany na GitHubie i można go zainstalować również jako własną instancję self-hosted na serwerze VPS lub Raspberry Pi.
Najprostszym sposobem na darmowe powiadomienia push z serwera Linux jest ntfy.sh. Cały proces zajmuje dosłownie 2 minuty. Krok pierwszy: zainstaluj aplikację ntfy na smartfonie — dostępna jest bezpłatnie w Google Play, F-Droid oraz App Store. Krok drugi: otwórz aplikację i zasubskrybuj wybrany temat, np. "moj-serwer-alerty". Krok trzeci: na serwerze Linux wyślij powiadomienie jedną komendą: curl -d "Twoja wiadomość" ntfy.sh/moj-serwer-alerty. Powiadomienie push pojawi się na telefonie w ciągu 1–3 sekund. Możesz też dodawać tytuł, priorytet, emoji i tagi przez nagłówki HTTP. ntfy obsługuje również załączniki (do 15 MB), akcje klikalne (np. przyciski z URL) oraz formatowanie Markdown w treści wiadomości.
Integracja Zabbix z ntfy pozwala zastąpić wolne powiadomienia email natychmiastowymi alertami push na telefonie. Konfiguracja składa się z trzech kroków i zajmuje około 10 minut. Po pierwsze: utwórz skrypt alertów ntfy.sh w katalogu AlertScriptsPath Zabbix (domyślnie /usr/lib/zabbix/alertscripts). Skrypt powinien przyjmować trzy parametry — temat, tytuł i treść — oraz wysyłać je przez curl do ntfy.sh z odpowiednim priorytetem. Po drugie: w panelu Zabbix dodaj nowy Media Type o typie Script, wskazujący na utworzony skrypt, i zdefiniuj trzy parametry wejściowe ({ALERT.SENDTO}, {ALERT.SUBJECT}, {ALERT.MESSAGE}). Po trzecie: skonfiguruj Trigger Action z przypisaniem do użytkowników, którzy mają otrzymywać powiadomienia. Dodatkowo możesz mapować poziomy severity Zabbix (Information, Warning, Disaster) na priorytety ntfy (default, high, urgent), dzięki czemu krytyczne alerty przebijają tryb Nie przeszkadzać na telefonie.
Tak, publiczny serwer ntfy.sh jest całkowicie darmowy, otwartoźródłowy i nie wymaga rejestracji ani podawania danych osobowych. Limity darmowego planu to: 250 wiadomości dziennie na adres IP, maksymalny rozmiar załącznika 15 MB, retencja wiadomości przez 12 godzin oraz limit 5 wiadomości w serii (burst). Dla typowego monitoringu serwera VPS, homelabu czy kilku skryptów automatyzujących te limity są w pełni wystarczające. Jeśli potrzebujesz wyższych limitów, ntfy oferuje płatny plan ntfy Pro (od 3 USD/miesiąc) z 500 wiadomościami dziennie i załącznikami do 100 MB. Alternatywnie — możesz postawić własną instancję ntfy na swoim serwerze (self-hosted), co całkowicie eliminuje limity i daje pełną kontrolę nad danymi. Instalacja self-hosted jest prosta: dostępna jest paczka deb, obraz Docker oraz binarki dla Linux, macOS i Windows.
Email, SMS i ntfy to trzy różne podejścia do alertowania z serwera — każde ma swoje zalety i wady. Email wymaga konfiguracji serwera SMTP (Postfix, Sendgrid, Mailgun), a dostarczenie wiadomości trwa od 1 do nawet 15 minut — nie nadaje się do krytycznych alertów, gdzie liczy się czas reakcji. SMS (np. przez Twilio, SMSAPI lub SMSCenter) działa szybko (2–5 sekund), ale kosztuje od 0,05 do 0,15 PLN za wiadomość i wymaga konta API z przedpłatą. Przy 50 alertach dziennie to już 75–225 PLN miesięcznie. ntfy łączy zalety obu rozwiązań: powiadomienia push dochodzą w ciągu 1–3 sekund (szybciej niż email, porównywalnie z SMS), są całkowicie darmowe i wymagają jedynie komendy curl — zero konfiguracji SMTP, zero kont API, zero opłat. Dodatkowo ntfy obsługuje priorytety, załączniki, emoji i akcje klikalne, czego SMS i email nie oferują w tak prosty sposób.
Monitorowanie logowań SSH w czasie rzeczywistym to podstawa bezpieczeństwa serwera. Dzięki ntfy i modułowi PAM możesz otrzymywać natychmiastowy alert push na telefon przy każdym logowaniu. Krok pierwszy: utwórz skrypt /usr/local/bin/ssh-notify.sh, który pobiera nazwę użytkownika ($PAM_USER) i adres IP ($PAM_RHOST), a następnie wysyła powiadomienie przez curl do ntfy.sh z tytułem "Logowanie SSH" i priorytetem high. Krok drugi: nadaj skryptowi uprawnienia wykonywania (chmod +x). Krok trzeci: dodaj wpis "session optional pam_exec.so /usr/local/bin/ssh-notify.sh" w pliku /etc/pam.d/sshd. Od tej pory każde logowanie SSH (również przez klucz publiczny) wywoła natychmiastowe powiadomienie push na telefonie z informacją kto i skąd się zalogował. To świetne uzupełnienie fail2ban — widzisz nie tylko zablokowane próby, ale również udane logowania, co pozwala wykryć nieautoryzowany dostęp w czasie rzeczywistym.
Brak miejsca na dysku to jedna z najczęstszych przyczyn awarii serwera — baza danych przestaje działać, logi się nie zapisują, a usługi padają jedna po drugiej. Dzięki ntfy możesz ustawić automatyczny monitoring w 5 minut. Utwórz skrypt bash, który sprawdza zapełnienie partycji poleceniem df, parsuje wynik i porównuje z ustalonym progiem (np. 85%). Gdy użycie dysku przekroczy próg, skrypt wysyła powiadomienie push przez ntfy.sh z informacją o nazwie partycji, procentowym zapełnieniu i pozostałej wolnej przestrzeni. Dodaj skrypt do crona (np. co 15–30 minut: */30 * * * * /usr/local/bin/disk-check.sh) i będziesz automatycznie powiadamiany o braku miejsca na dysku, zanim dojdzie do awarii. Warto monitorować nie tylko partycję główną (/), ale też /var (logi i bazy danych), /tmp oraz /home. Dla bardziej zaawansowanych zastosowań możesz rozbudować skrypt o monitorowanie inode'ów — ich wyczerpanie powoduje te same objawy co brak miejsca, mimo że df pokazuje wolne gigabajty.
ntfy obsługuje pięć poziomów priorytetu, które kontrolują sposób wyświetlania powiadomienia na telefonie. Priorytet min (1) to ciche powiadomienie bez wibracji i dźwięku — idealne do logów informacyjnych. Priorytet low (2) wyświetla powiadomienie bez dźwięku. Priorytet default (3) to standardowe powiadomienie z dźwiękiem systemowym. Priorytet high (4) włącza dźwięk i wyświetla powiadomienie z wysokim priorytetem — nadaje się do ostrzeżeń Zabbix typu Warning. Priorytet urgent (5) przebija tryb Nie przeszkadzać i wyświetla powiadomienie na całym ekranie — telefon zadzwoni nawet w nocy, co jest kluczowe dla alertów typu Disaster, np. gdy serwer produkcyjny przestaje odpowiadać. Priorytet ustawiasz nagłówkiem HTTP: curl -H "Priority: urgent" -d "Serwer nie odpowiada!" ntfy.sh/twoj-temat. Możesz też używać wartości liczbowych (1–5) zamiast nazw tekstowych.
Tak, tematy (topics) na publicznym serwerze ntfy.sh są dostępne dla każdego, kto zna ich nazwę — nie ma domyślnej autentykacji. Oznacza to, że ktoś może odczytać Twoje powiadomienia lub wysyłać fałszywe alerty, jeśli odgadnie nazwę tematu. Dlatego bezwzględnie używaj długich, losowych nazw tematów (np. zabbix-a8f3k9x2m1-prod lub monitoring-x7k2p9m4), których nie da się łatwo zgadnąć — traktuj nazwę tematu jak hasło. Unikaj nazw generycznych typu "test", "alerty" czy "serwer". Dla pełnego bezpieczeństwa najlepszym rozwiązaniem jest postawienie własnej instancji ntfy na swoim serwerze. Self-hosted ntfy oferuje pełną kontrolę dostępu z autentykacją użytkowników (login i hasło lub tokeny), uprawnieniami per temat (odczyt, zapis) oraz szyfrowaniem end-to-end. Instalacja przez Docker zajmuje kilka minut: docker run -p 80:80 binwiederhier/ntfy serve.
Najwygodniejszym sposobem jest utworzenie uniwersalnej funkcji ntfy, którą możesz wywoływać jednolinijkowo w dowolnym skrypcie. Dodaj funkcję do pliku ~/.bashrc (dla jednego użytkownika) lub /etc/profile.d/ntfy.sh (globalnie dla całego serwera). Funkcja opakowuje wywołanie curl z nagłówkami Title, Priority i Tags — dzięki temu w każdym skrypcie bash możesz wysłać powiadomienie push poleceniem: ntfy "Backup zakończony pomyślnie" "Backup" "high". Warto stworzyć też gotowe warianty dla różnych poziomów ważności: ntfy-ok (priorytet default, zielona ikona), ntfy-warn (priorytet high, żółta ikona) i ntfy-error (priorytet urgent, czerwona ikona z syreną). Dzięki temu typowe scenariusze użycia — zakończenie backupu, błąd w cronie, restart usługi, przekroczenie progu CPU — wymagają dodania jednej linii kodu do istniejącego skryptu. Funkcje ntfy świetnie integrują się z operatorem && i || w bashu, np.: rsync /data /backup && ntfy-ok "Backup OK" || ntfy-error "Backup FAILED".




