systemd & Services — Terminal

systemd adalah init system default di hampir semua distro Linux modern (Ubuntu, Debian, Fedora, Arch). Tugasnya: jalankan service, restart saat crash, manage de

systemd adalah init system default di hampir semua distro Linux modern (Ubuntu, Debian, Fedora, Arch). Tugasnya: jalankan service, restart saat crash, manage dependency antar-service, kumpulkan log.

Unit files — blueprint untuk service:

# /etc/systemd/system/myapp.service
[Unit]
Description=My Node.js app
After=network.target

[Service]
Type=simple
User=deploy
WorkingDirectory=/srv/myapp
ExecStart=/usr/bin/node server.js
Restart=on-failure
RestartSec=5
Environment="NODE_ENV=production"

[Install]
WantedBy=multi-user.target

Tiga bagian:

Perintah dasar systemctl:

sudo systemctl start myapp       # jalankan sekarang
sudo systemctl stop myapp        # hentikan
sudo systemctl restart myapp     # restart
sudo systemctl reload myapp      # reload config tanpa stop/start
sudo systemctl status myapp      # status + 10 log terakhir
sudo systemctl enable myapp      # start otomatis saat boot
sudo systemctl disable myapp     # tidak start saat boot
sudo systemctl daemon-reload     # reload setelah edit unit file

Melihat log dengan journalctl:

journalctl -u myapp              # semua log service ini
journalctl -u myapp -f           # follow (seperti tail -f)
journalctl -u myapp --since "1 hour ago"
journalctl -u myapp -n 100       # 100 baris terakhir
journalctl -u myapp --grep "ERROR"
journalctl -p err                # hanya level error ke atas

Restart policy:

Policy Kapan restart
no Tidak pernah (default)
on-failure Jika exit non-zero atau crash (paling umum)
always Selalu, termasuk jika di-stop manual
on-abnormal Hanya sinyal/timeout

Timers — alternatif modern untuk cron:

# /etc/systemd/system/backup.timer
[Timer]
OnCalendar=daily
Persistent=true  # jalankan saat boot jika terlewat

[Install]
WantedBy=timers.target

Keuntungan timer vs cron:

User-level service (tanpa sudo):

systemctl --user start myapp
# unit file di ~/.config/systemd/user/myapp.service
loginctl enable-linger $USER     # service tetap jalan meski user logout

Debugging service yang gagal start:

systemctl status myapp           # cek exit code + log terakhir
journalctl -u myapp -b           # log sejak boot terakhir
systemd-analyze verify /etc/systemd/system/myapp.service  # validasi syntax

Pitfalls: