Diagram alur sistem netwatch auto-reboot di Linux menggunakan Bash dan cron — ping gagal 6 kali berturut-turut memicu reboot otomatis via systemd

Implementasi Netwatch Auto-Reboot di Linux Armbian

Perangkat headless — STB Armbian, Raspberry Pi, atau server mini sejenisnya — rentan terhadap satu masalah yang tidak bisa ditangani secara manual: koneksi internet putus tanpa recovery otomatis. Ketika router mengalami hang atau DHCP lease bermasalah, perangkat bisa terjebak dalam kondisi offline berjam-jam sampai ada yang menyadarinya dan melakukan reboot secara manual.

Artikel ini membahas cara membangun sistem netwatch sederhana menggunakan Bash dan cron: sebuah script yang memantau koneksi ke router secara berkala, mencatat kegagalan, dan melakukan reboot secara aman jika koneksi benar-benar terputus total selama satu jam penuh — bukan sekadar gangguan sesaat.


Prasyarat

  • Linux berbasis systemd (Armbian, Raspberry Pi OS, Debian, Ubuntu Server)
  • Akses terminal sebagai root
  • ping dan cron tersedia (keduanya ada secara default di hampir semua distro)

Cara Kerja

Sebelum membuat file apapun, penting untuk memahami logika di balik script ini — terutama bagian toleransi kegagalan, karena inilah yang membedakannya dari netwatch naif yang langsung reboot saat ping pertama gagal.

Uji Ping

Setiap kali script berjalan, dikirimkan 3 paket ICMP ke IP router dengan batas tunggu 3 detik per paket. Sesuai perilaku ping di Linux, jika minimal satu paket mendapat balasan, exit code-nya 0 (sukses). Ketiga paket harus gagal semua baru dianggap kegagalan.

Counter Kegagalan dan Toleransi 1 Jam

Script tidak langsung reboot saat satu tes gagal. Setiap kegagalan dicatat sebagai hitungan di file /tmp/netwatch_fails. Script dijadwalkan berjalan setiap 10 menit, sehingga diperlukan 6 kegagalan berturut-turut untuk memenuhi toleransi 60 menit sebelum reboot dieksekusi.

Jika router sempat membalas di tengah periode pemantauan — bahkan hanya sekali di menit ke-40 — counter otomatis di-reset ke nol. Ini mencegah false positive akibat gangguan sesaat.

Counter disimpan di /tmp yang berbasis RAM, bukan di eMMC atau SD card, untuk menghindari write cycle yang tidak perlu pada media penyimpanan.

Reboot Aman via systemd

Reboot menggunakan /bin/systemctl reboot dengan jalur absolut — diperlukan karena cron berjalan dengan environment yang terbatas dan tidak selalu menemukan binary di PATH yang biasa. Penggunaan systemctl reboot juga memastikan semua service dimatikan secara terstruktur sebelum sistem restart, berbeda dari reboot bare yang bisa memotong proses yang sedang berjalan.


Langkah 1 — Buat Script Netwatch

Paste seluruh isi berikut:

Sesuaikan nilai TARGET_IP dengan IP gateway yang digunakan. Pada kebanyakan jaringan rumahan, nilainya 192.168.1.1 atau 192.168.0.1 — verifikasi dengan ip route | grep default.

Jadikan script executable:


Langkah 2 — Jadwalkan dengan Crontab

Perintah berikut menambahkan jadwal ke crontab root dengan pelindung duplikasi — aman dijalankan lebih dari sekali:

Verifikasi jadwal tersimpan dengan benar:

Output harus memuat tepat satu baris berikut:


Langkah 3 — Uji Manual

Jalankan script secara langsung untuk memastikan tidak ada error sintaks:

Jika router aktif, script selesai dalam 1–3 detik tanpa output apapun. Ini perilaku yang benar — script hanya menulis ke log saat ada kegagalan atau saat reboot dieksekusi.


Monitoring

Cek Status Counter

Interpretasi:

KondisiKeterangan
File tidak ditemukanJaringan normal, ping terakhir sukses
Berisi angka 1–5Ada gangguan sementara, belum mencapai ambang reboot
File tidak ada lagi setelah rebootCounter dibersihkan sebelum reboot — normal

Cek Riwayat Auto-Reboot

Setiap entri log menandakan satu kejadian reboot otomatis beserta timestamp-nya.


Ringkasan Parameter

ParameterNilai DefaultKeterangan
TARGET_IP192.168.1.1IP router/gateway yang dipantau
-c 33 paketJumlah paket ping per pengujian
-W 33 detikTimeout per paket
MAX_FAILS6Kegagalan berturut-turut sebelum reboot (6 × 10 menit = 60 menit)
Interval cron*/10 * * * *Script berjalan setiap 10 menit

Penyesuaian Umum

Mengubah toleransi waktu — untuk toleransi 30 menit, ubah MAX_FAILS menjadi 3. Untuk 2 jam, ubah menjadi 12. Interval cron tidak perlu diubah.

Memantau host selain router — ganti TARGET_IP dengan IP atau domain lain, misalnya 8.8.8.8 untuk memantau konektivitas ke internet secara langsung. Perlu dipertimbangkan bahwa ping ke IP publik bisa gagal karena alasan di luar kendali perangkat (ISP down, firewall) sehingga false positive lebih mungkin terjadi dibanding memantau router lokal.

Menonaktifkan sementara — cukup hapus baris dari crontab:


Ringkasan Perintah


Referensi


Catatan Penutup

Artikel ini disusun berdasarkan pengujian langsung pada lingkungan berikut:

  • Perangkat: STB HG680P (Amlogic S905X), kompatibel dengan Raspberry Pi dan server mini berbasis Linux lainnya
  • Sistem Operasi: Armbian (Debian-based), berlaku untuk distro Linux berbasis systemd lainnya
  • Shell: Bash

Solusi ini bersifat ringan dan tidak memerlukan dependensi tambahan di luar paket standar yang sudah tersedia pada hampir semua instalasi Linux.

Leave a Reply

Your email address will not be published. Required fields are marked *