Cara Membuat Service Nginx dan PHP-FPM Auto-Restart Otomatis Saat Crash di VPS Linux Ubuntu via Systemd
Salah satu mimpi buruk terbesar bagi pemilik website dan administrator server di Indonesia adalah bangun di pagi hari dan mendapati situs web bisnis mereka sudah tidak bisa diakses selama berjam-jam.
Ketika Anda membuka terminal SSH dan memeriksa status server, Anda menemukan penyebabnya: layanan web server Nginx atau runtime PHP-FPM mendadak mati (crashed) akibat lonjakan trafik di tengah malam atau proses Out Of Memory (OOM Killer) yang dipicu oleh database. Secara bawaan, unit layanan systemd di Linux Ubuntu tidak selalu diatur untuk menghidupkan kembali service yang mati mendadak tersebut secara otomatis.
Kabar baiknya, Anda tidak memerlukan skrip pemantau rumit pihak ketiga. Manajer sistem bawaan Ubuntu dan Debian, yaitu systemd, memiliki fitur auto-restart tangguh yang bisa membangkitkan kembali layanan Nginx dan PHP-FPM dalam hitungan detik setelah terjadi crash.

Mengapa Harus Menggunakan Fitur Override Systemd?
Banyak administrator pemula melakukan kesalahan dengan mengedit langsung file konfigurasi utama service di /lib/systemd/system/nginx.service. Cara ini sangat tidak disarankan karena setiap kali sistem operasi melakukan pembaruan paket (via apt upgrade), file tersebut akan ditimpa kembali ke versi default pabrik dan pengaturan Anda akan hilang.
Cara standar industri yang benar adalah menggunakan mekanisme systemd drop-in override melalui perintah systemctl edit. Mekanisme ini membuat file konfigurasi terpisah yang tersimpan aman di direktori /etc/systemd/system/ dan tidak akan pernah terhapus oleh pembaruan sistem.
Langkah 1: Pasang Auto-Restart pada Layanan Nginx
Mari kita konfigurasikan layanan Nginx agar bangkit otomatis dalam lima detik jika mengalami crash:
- Jalankan perintah override untuk Nginx di terminal SSH:
- “`bash
- sudo systemctl edit nginx.service
- “`
- Editor teks (biasanya Nano) akan terbuka dengan file kosong. Masukkan baris konfigurasi berikut:
- “`ini
- [Service]
- Restart=on-failure
- RestartSec=5s
- StartLimitIntervalSec=60s
- StartLimitBurst=5
- “`
- Tekan Ctrl + O lalu Enter untuk menyimpan, kemudian tekan Ctrl + X untuk keluar dari editor.
Penjelasan parameter penting di atas: – Restart=on-failure: Memerintahkan systemd untuk merestart Nginx hanya jika proses mati dengan kode kesalahan tidak normal (crash atau signal kill), bukan saat Anda sengaja mematikannya lewat perintah systemctl stop. – RestartSec=5s: Jeda waktu tunggu lima detik sebelum mencoba menghidupkan kembali service. – StartLimitIntervalSec=60s dan StartLimitBurst=5: Pelindung lingkaran setan (crash loop). Jika service crash lebih dari lima kali dalam satu menit karena kesalahan fatal (misalnya file konfigurasi salah), systemd akan berhenti mencoba agar server tidak kehabisan CPU.
| Opsi Kebijakan Restart | Perilaku Saat Service Mati Normal | Perilaku Saat Service Crash / OOM | Rekomendasi Penggunaan |
|---|---|---|---|
| Restart=no | Tidak hidup kembali | Tetap mati | Nilai standar paket Linux |
| Restart=always | Selalu hidup kembali | Langsung hidup kembali | Service latar belakang mutlak |
| Restart=on-failure | Tetap mati jika dimatikan | Langsung hidup kembali | Terbaik untuk Nginx dan PHP-FPM |
| Restart=on-abort | Tetap mati | Hidup kembali jika terkena abort | Kurang komprehensif |

Langkah 2: Pasang Auto-Restart pada PHP-FPM
Runtime PHP-FPM adalah komponen yang paling rentan mengalami crash di server WordPress atau Laravel akibat script yang memakan memori berlebih.
Sesuaikan perintah berikut dengan versi PHP yang aktif di VPS Anda (misalnya PHP 8.2 atau 8.3):
- Buka editor override untuk PHP-FPM:
- “`bash
- sudo systemctl edit php8.2-fpm.service
- “`
- Tambahkan baris konfigurasi yang sama persis:
- “`ini
- [Service]
- Restart=on-failure
- RestartSec=3s
- StartLimitIntervalSec=60s
- StartLimitBurst=5
- “`
- Simpan dan tutup editor.
Langkah 3: Terapkan Perubahan dan Uji Coba Lapangan
Agar konfigurasi baru terbaca oleh kernel systemd, muat ulang daemon sistem:
sudo systemctl daemon-reload
Sekarang, mari kita buktikan apakah sistem pemulihan otomatis ini benar-benar bekerja. Kita akan melakukan simulasi mematikan paksa seluruh proses PHP-FPM menggunakan sinyal kill:
sudo killall -9 php-fpm8.2
Tunggu sekitar 4 sampai 5 detik, lalu periksa status layanan PHP-FPM:
sudo systemctl status php8.2-fpm.service
Anda akan melihat baris status bertuliskan Active: active (running) dengan catatan waktu uptime yang baru saja ter-reset. Ini membuktikan bahwa systemd mendeteksi kematian proses dan langsung menghidupkannya kembali secara otomatis tanpa campur tangan manusia.
Kesimpulan
Dengan menerapkan konfigurasi Restart=on-failure pada Nginx dan PHP-FPM di VPS Linux Anda, risiko website mengalami downtime berkepanjangan dapat ditekan hingga titik terendah. Website bisnis Anda akan memiliki daya tahan tinggi dan tetap online meskipun sesekali terjadi benturan memori di server.
— Catatan editor: Referensi teknis: Manual dokumentasi resmi systemd.service(5) dari Proyek Freedesktop, praktik terbaik pengelolaan daemon Linux Ubuntu LTS, dan panduan administrasi web server Nginx. Disusun secara independen untuk administrator server di Indonesia.