Cara saya buat auto-recovery untuk Radiosonde Auto-RX + KA9Q + Airspy Mini
Beberapa hari selepas setup Radiosonde Auto-RX 1.9.0 + KA9Q + Airspy Mini berjalan elok, tiba-tiba scanner saya mula buat perangai. Web UI masih boleh buka. Auto-RX masih hidup. Tapi dekat bahagian log, mula keluar error timeout berulang-ulang.
KA9Q (sonde.local) - tune call failed ... with a timeout.
Is the server running?
Task Manager - Ongoing issue with KA9Q server connection.
Please check the logs.
Mula-mula memang saya ingat mungkin Auto-RX rosak, atau Airspy Mini ada masalah. Rupanya tidak. Masalah yang lebih menarik ialah KA9Q radiod masih ditunjukkan sebagai active (running) oleh systemd, tetapi bahagian control/tune dia dah tak memberi respons dengan betul.
Simptom Yang Saya Nampak
CRITICAL: KA9Q (sonde.local) - tune call failed ... with a timeout.
ERROR: Task Manager - Ongoing issue with KA9Q server connection.
Tapi bila saya check:
sudo systemctl status radiod@airspymini-autorx --no-pager
Status masih:
Active: active (running)
Malah proses radiod, avahi-publish-service dan alamat sonde.local masih ada. Jadi ini bukan service crash biasa.
Test KA9Q
Saya cuba:
control sonde.local
KA9Q masih memberi respons, tetapi keluar channel pelik seperti:
SSRC preset samprate freq, Hz SNR output
40277503 0 402775000 nan (null)
samprate = 0, nan, dan (null) itu memang nampak macam channel yang tak terbentuk dengan sempurna atau stale. Jadi saya cuba restart KA9Q:
sudo systemctl restart radiod@airspymini-autorx
Tunggu beberapa saat:
sleep 8
Kemudian restart Auto-RX:
docker restart radiosonde_auto_rx
Selepas itu scanner mula hidup semula:
Scanner (KA9Q sonde.local) - Starting Scanner Thread
Scanner (KA9Q sonde.local) - Running frequency scan.
Auto-RX saya kembali normal.
Jadi Apa Sebenarnya Berlaku?
Dalam kes saya, masalah nampaknya bukan:
Airspy rosak
Docker rosak
Auto-RX rosak
station.cfg rosak
Sebaliknya KA9Q nampak macam masuk keadaan “service masih hidup tetapi tune/control path dah tersangkut”. Masalah macam ini tak akan dikesan oleh systemd biasa sebab dari sudut Linux, process masih hidup.
process masih hidup = systemd anggap service sihat
Padahal Auto-RX sudah tak boleh buka channel baru. Sebab itu saya fikir: daripada tunggu saya sedar sendiri beberapa jam kemudian, lebih baik Raspberry Pi repair dirinya sendiri.
Penyelesaian Saya: KA9Q Watchdog
Saya buat satu watchdog mudah. Idea dia:
Setiap 5 minit
↓
Check log Auto-RX
↓
Ada banyak KA9Q tune timeout?
↓
TIDAK → biarkan
YA
↓
Restart KA9Q
↓
Tunggu 8 saat
↓
Restart Auto-RX
Saya sengaja tak buat restart KA9Q setiap malam secara paksa. Kalau semuanya sihat, jangan kacau. Watchdog hanya bertindak bila betul-betul nampak simptom masalah.
Langkah 1 — Buat Script Watchdog
Buka:
sudo nano /usr/local/sbin/ka9q-watchdog.sh
Masukkan:
#!/bin/bash
LOCK=/run/ka9q-watchdog.lock
LOG=/var/log/ka9q-watchdog.log
CONTAINER="radiosonde_auto_rx"
SERVICE="radiod@airspymini-autorx"
exec 9>"$LOCK"
flock -n 9 || exit 0
ERRORS=$(docker logs --since 5m "$CONTAINER" 2>&1 | \
grep -cE 'tune call failed.*timeout|Ongoing issue with KA9Q server connection' || true)
if [ "$ERRORS" -ge 3 ]; then
echo "$(date '+%F %T') - KA9Q unhealthy: $ERRORS errors. Restarting..." >> "$LOG"
systemctl restart "$SERVICE"
sleep 8
docker restart "$CONTAINER" >> "$LOG" 2>&1
sleep 15
echo "$(date '+%F %T') - Recovery completed." >> "$LOG"
fi
Simpan:
Ctrl + O
Enter
Ctrl + X
Kemudian jadikan executable:
sudo chmod +x /usr/local/sbin/ka9q-watchdog.sh
Kenapa Saya Letak 3 Error?
Saya tak mahu restart KA9Q hanya kerana satu timeout kecil. Kadang-kadang satu command boleh lambat atau ada transient error. Sebab itu saya gunakan:
if [ "$ERRORS" -ge 3 ]
Maknanya kalau dalam 5 minit terdapat sekurang-kurangnya tiga error berkaitan KA9Q, barulah watchdog anggap sistem bermasalah.
Langkah 2 — Buat systemd Service
Buka:
sudo nano /etc/systemd/system/ka9q-watchdog.service
Isi:
[Unit]
Description=KA9Q Auto-RX Health Watchdog
After=docker.service network-online.target
[Service]
Type=oneshot
ExecStart=/usr/local/sbin/ka9q-watchdog.sh
Langkah 3 — Buat Timer Setiap 5 Minit
Buka:
sudo nano /etc/systemd/system/ka9q-watchdog.timer
Masukkan:
[Unit]
Description=Check KA9Q health every 5 minutes
[Timer]
OnBootSec=5min
OnUnitActiveSec=5min
Persistent=true
[Install]
WantedBy=timers.target
Kemudian:
sudo systemctl daemon-reload
Aktifkan:
sudo systemctl enable --now ka9q-watchdog.timer
Check Sama Ada Timer Hidup
Jalankan:
systemctl list-timers | grep ka9q
Kalau semuanya betul, kita akan nampak ka9q-watchdog.timer bersama masa NEXT dan LEFT. Maknanya setiap lima minit systemd akan panggil watchdog tadi.
Test Watchdog Secara Manual
Tak perlu tunggu lima minit. Boleh jalankan:
sudo systemctl start ka9q-watchdog.service
Kemudian:
sudo systemctl status ka9q-watchdog.service --no-pager
Disebabkan service ini Type=oneshot, selepas selesai check status dia boleh kembali kepada inactive (dead). Itu normal. Ia bukan service yang duduk running sepanjang masa. Timer yang akan hidupkan dia setiap lima minit.
Kenapa Log Watchdog Belum Ada?
Masa mula-mula saya cuba:
sudo tail -f /var/log/ka9q-watchdog.log
Saya dapat:
tail: cannot open '/var/log/ka9q-watchdog.log':
No such file or directory
Ini sebenarnya bukan error watchdog. Script hanya menulis log apabila ia benar-benar detect masalah dan melakukan recovery. Kalau KA9Q sihat, script keluar senyap sahaja.
Kalau nak create fail log dari awal:
sudo touch /var/log/ka9q-watchdog.log
sudo chmod 644 /var/log/ka9q-watchdog.log
Selepas itu:
sudo tail -f /var/log/ka9q-watchdog.log
Kalau kosong, itu sebenarnya berita baik. Maknanya watchdog belum perlu repair apa-apa.
Apa Yang Berlaku Bila Watchdog Detect Masalah?
Contohnya Auto-RX mula keluarkan:
tune call failed ... timeout
berulang kali. Watchdog akan kira error lima minit terakhir. Kalau ≥3:
KA9Q unhealthy
Kemudian:
systemctl restart radiod@airspymini-autorx
Tunggu 8 saat, kemudian:
docker restart radiosonde_auto_rx
Dalam log nanti lebih kurang:
2026-09-25 03:15:02 - KA9Q unhealthy: 8 errors. Restarting...
2026-09-25 03:15:26 - Recovery completed.
Jadi kalau masalah berlaku tengah malam pun, sistem boleh cuba pulihkan diri sendiri.
Kenapa Restart KA9Q Dahulu, Baru Auto-RX?
KA9Q restart
↓
tunggu
↓
Auto-RX restart
Urutan ini penting sebab Auto-RX bergantung kepada sonde.local yang disediakan oleh KA9Q. Kalau Auto-RX hidup dahulu ketika KA9Q masih belum ready, kita boleh dapat semula Could not contact KA9Q atau tune call failed.
Kenapa Saya Tak Restart Raspberry Pi Terus?
Restart seluruh Raspberry Pi terlalu agresif. Masalah saya hanya pada layer KA9Q. Airspy Mini sendiri sebelum ini sudah saya test secara direct dengan airspy_rx dan dia boleh capture IQ dengan normal.
restart komponen paling kecil yang bermasalah dahulu
Baru escalate jika masih gagal.
Setup Saya Sekarang
Radiosonde Auto-RX : 1.9.0
SDR : Airspy Mini
Backend : KA9Q
KA9Q hostname : sonde.local
Docker : Ya
OS : Raspberry Pi OS 64-bit
KA9Q:
[global]
hardware = airspy
mode = fm
status = sonde.local
iface = lo
ttl = 0
data = sonde-pcm.local
[airspy]
device = airspy
description = "auto_rx"
frequency = 405m6
gainstep = 17
Scan Auto-RX saya:
400.05 MHz – 405.0 MHz
Satu Lagi Perkara Penting
Kalau nampak error:
tune call failed
jangan terus fikir Airspy dah rosak. Dalam kes saya, Airspy langsung tak rosak. Masalah boleh datang daripada:
KA9Q stale channel
radiod stuck
control path timeout
multicast state
Auto-RX ↔ KA9Q communication
Hardware SDR adalah antara benda terakhir yang patut kita tuduh kalau direct SDR test masih OK.
Cara Check Cepat Kalau Masalah Datang Lagi
Saya simpan command ini:
sudo systemctl status radiod@airspymini-autorx --no-pager
control sonde.local
docker logs --since 5m radiosonde_auto_rx
Kalau radiod active tetapi Auto-RX penuh dengan tune call failed ... timeout, saya tahu ia kemungkinan kes sama.
Kesimpulan
Masalah paling susah dalam server bukan semestinya bila process mati. Kadang-kadang service = running, tetapi fungsi utama di dalamnya dah tak memberi respons. Itulah yang berlaku pada setup KA9Q saya.
CHECK
↓
KA9Q OK?
↓
YES → buat apa-apa pun tak perlu
↓
NO
↓
restart KA9Q
↓
restart Auto-RX
Simple saja. Tapi untuk station radiosonde yang berjalan 24/7, benda kecil macam ini sangat berguna. Sekurang-kurangnya selepas ini kalau KA9Q tersangkut masa saya tidur, saya tak perlu tunggu esok pagi baru sedar spectrum dah kosong berjam-jam.