System Administration

Menulis Unit systemd yang Benar: Restart Otomatis dan Batasannya

Sampul artikel: Menulis Unit systemd yang Benar: Restart Otomatis dan Batasannya

Restart=always terdengar seperti solusi, tetapi tanpa batas ia berubah menjadi percobaan tanpa henti yang menutupi penyebab gagalnya.

Unit contoh

[Unit]
Description=Netvora API
After=network-online.target mysql.service
Wants=network-online.target

[Service]
Type=simple
User=netvora
WorkingDirectory=/opt/netvora-api
ExecStart=/opt/netvora-api/bin/api --config /etc/netvora/api.yaml
Restart=on-failure
RestartSec=3
StartLimitIntervalSec=120
StartLimitBurst=5

# Batasi dampak kalau layanan bermasalah
NoNewPrivileges=true
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Arti tiap setelan

SetelanArti sebenarnya
Restart=on-failureDijalankan ulang hanya kalau keluar dengan kode galat atau terbunuh sinyal
Restart=alwaysDijalankan ulang juga saat berhenti normal, dan ini sering tidak diinginkan
RestartSec=3Jeda sebelum percobaan berikutnya, memberi waktu dependensi siap
StartLimitIntervalSec + StartLimitBurstBatas percobaan dalam satu rentang waktu
After=Urutan mulai, bukan jaminan dependensi sudah siap menerima koneksi

Baris terakhir itu yang paling menyesatkan. After=mysql.service hanya berarti layanan dimulai setelah MySQL dimulai, bukan setelah MySQL siap melayani. Kalau aplikasi langsung gagal koneksi saat dinyalakan, yang dibutuhkan adalah percobaan ulang di sisi aplikasi, bukan menambah After=.

Perilaku setelah batas percobaan tercapai

Kalau lima percobaan dalam 120 detik juga gagal, systemd berhenti mencoba dan menandai unit sebagai failed. Ini perilaku yang diinginkan: layanan yang gagal berulang menandakan masalah konfigurasi atau data, dan mencoba terus hanya menyembunyikannya.

systemctl status netvora-api
journalctl -u netvora-api -n 50 --no-pager
systemctl reset-failed netvora-api && systemctl start netvora-api

reset-failed menghapus penghitung percobaan setelah penyebabnya diperbaiki. Tanpa itu, unit akan menolak start sampai penghitungnya direset manual.

Cara memeriksa konfigurasi tanpa menyalakan layanan

systemd-analyze verify /etc/systemd/system/netvora-api.service
systemctl cat netvora-api

systemd-analyze verify menangkap salah tulis nama setelan sebelum layanan dijalankan. Ini menghemat satu siklus gagal-jalan yang biasanya memakan waktu paling banyak.

Tag artikel ini

Tim Netvora

Menulis di Netvora Blog. Punya pertanyaan teknis soal artikel ini? Kirim ke info@netvora.co.id.