Menjalankan Aplikasi atau Bot Menggunakan Systemd Agar Aktif 24/7

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

AspekKelebihanKekurangan / Risiko
KetahananAplikasi otomatis di-restart, sangat cocok untuk 24/7.Jika error terus-menerus, systemd akan terus mencoba dan dapat membebani CPU.
OperasionalTidak perlu lagi screen atau tmux secara manual.Butuh pemahaman dasar menulis unit service.
MonitoringLog terpusat melalui journalctl.Log journald dapat membesar bila tidak diatur rotasinya.
KeamananDapat dijalankan sebagai user biasa, bukan root.Salah mengatur user atau izin dapat menimbulkan risiko.

Penggunaan (Cara Membuat Service)

  1. 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
  2. Muat ulang konfigurasi systemd lalu aktifkan dan jalankan layanan:
    bash
    sudo systemctl daemon-reload
    sudo systemctl enable mybot.service
    sudo systemctl start mybot.service
  3. 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 pada ExecStart, nama User, serta izin berkas.
  • Aplikasi langsung exit: pastikan perintah di ExecStart benar-benar berjalan jika dijalankan langsung di terminal. Jika membutuhkan environment khusus, deklarasikan melalui Environment= atau EnvironmentFile=.
  • Tidak restart padahal aplikasi crash: pastikan Restart=always (bukan no maupun on-success). Nilai RestartSec memberi jeda tiap percobaan agar CPU tidak langsung terbebani.
  • Log journald membengkak: batasi besarnya melalui /etc/systemd/journald.conf, misalnya SystemMaxUse=200M, lalu jalankan sudo 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 sekadar start).

Artikel Terkait