Systemd adalah sistem init dan manajer layanan pada distribusi Linux modern, termasuk Debian. Untuk menjaga sebuah aplikasi atau bot agar tetap berjalan 24/7, kita membuat sebuah unit service (berkas berekstensi .service) yang mendeklarasikan bagaimana aplikasi dijalankan, lalu mendaftarkannya ke systemd. Dengan pengaturan Restart=always, systemd akan otomatis menjalankan kembali aplikasi tersebut jika ia berhenti — baik karena crash, terjadi kesalahan, maupun setelah VPS melakukan reboot.
Pengertian
Secara sederhana, systemd bertugas menyalakan, menghentikan, dan memantau layanan di sistem Linux. Setiap layanan didefinisikan dalam sebuah unit file yang biasanya diletakkan di direktori /etc/systemd/system/. Bagi sebuah bot Telegram, web server, atau aplikasi apa pun, systemd bertindak sebagai "pengawas" yang memastikan proses tetap hidup sesuai konfigurasi yang kita tentukan.
Fungsi dan Manfaat
- Otomatis hidup saat boot: layanan akan jalan secara otomatis setelah VPS menyala, tanpa perlu mengetik perintah secara manual.
- Restart otomatis: apabila aplikasi berhenti tiba-tiba, systemd menjalankannya kembali sesuai parameter
Restart=. - Logging terpusat: seluruh output (stdout/stderr) dapat dibaca dengan
journalctl, tanpa perlu membuat berkas log manual. - Manajemen resource & izin: kita dapat menentukan user, working directory, variabel environment, dan batas penggunaan resource.
- Urutan dependensi: layanan dapat dinyalakan setelah jaringan atau layanan lain siap melalui direktif seperti
After=.
Kelebihan dan Kekurangan
| Aspek | Kelebihan | Kekurangan / Risiko |
|---|---|---|
| Ketahanan | Aplikasi otomatis di-restart, sangat cocok untuk 24/7. | Jika error terus-menerus, systemd akan terus mencoba dan dapat membebani CPU. |
| Operasional | Tidak perlu lagi screen atau tmux secara manual. | Butuh pemahaman dasar menulis unit service. |
| Monitoring | Log terpusat melalui journalctl. | Log journald dapat membesar bila tidak diatur rotasinya. |
| Keamanan | Dapat dijalankan sebagai user biasa, bukan root. | Salah mengatur user atau izin dapat menimbulkan risiko. |
Penggunaan (Cara Membuat Service)
- Buat berkas unit, misalnya
mybot.service, di/etc/systemd/system/:ini[Unit] Description=Bot Telegram contoh After=network.target [Service] Type=simple User=www-data WorkingDirectory=/opt/mybot ExecStart=/usr/bin/node /opt/mybot/bot.js Restart=always RestartSec=5 Environment=NODE_ENV=production [Install] WantedBy=multi-user.target - Muat ulang konfigurasi systemd lalu aktifkan dan jalankan layanan:bash
sudo systemctl daemon-reload sudo systemctl enable mybot.service sudo systemctl start mybot.service - Cek status layanan:bash
systemctl status mybot.service
Untuk bot yang ditulis dengan Python, cukup ubah nilai ExecStart menjadi perintah Python, misalnya ExecStart=/usr/bin/python3 /opt/mybot/bot.py. Pastikan berkas sudah memiliki hak yang sesuai dan dependensinya (misal virtual environment) sudah terpasang di server.
Troubleshoot
- Service gagal start (status failed): lihat detail penyebab dengan perintah
journalctl -u mybot.service -b. Periksa kembali path padaExecStart, namaUser, serta izin berkas. - Aplikasi langsung exit: pastikan perintah di
ExecStartbenar-benar berjalan jika dijalankan langsung di terminal. Jika membutuhkan environment khusus, deklarasikan melaluiEnvironment=atauEnvironmentFile=. - Tidak restart padahal aplikasi crash: pastikan
Restart=always(bukannomaupunon-success). NilaiRestartSecmemberi jeda tiap percobaan agar CPU tidak langsung terbebani. - Log journald membengkak: batasi besarnya melalui
/etc/systemd/journald.conf, misalnyaSystemMaxUse=200M, lalu jalankansudo systemctl restart systemd-journald. - Berjalan sebagai root padahal sebaiknya tidak: ubah
User=ke user biasa dan pastikan berkas serta direktori dimiliki oleh user tersebut. - Tidak jalan setelah reboot: pastikan layanan sudah di-
enable(bukan sekadarstart).