REFERENSI CEPAT SYSTEMD
Manajemen layanan, unit, timer, dan journalctl
Manajemen Layanan
Perintah Layanan Dasar
systemctl start nginx
systemctl stop nginx
systemctl restart nginx
systemctl reload nginx # reload config
systemctl status nginx
Enable / Disable
systemctl enable nginx # start at boot
systemctl disable nginx # remove from boot
systemctl enable --now nginx # enable + start
systemctl is-enabled nginx
Status Layanan
| active (running) | Layanan berjalan normal |
| active (exited) | Berjalan sekali dan selesai dengan sukses |
| inactive (dead) | Layanan dihentikan |
| failed | Layanan crash atau keluar dengan error |
| activating | Layanan sedang dijalankan |
File Unit
Lokasi File Unit
| /etc/systemd/system/ | Unit buatan admin (prioritas tertinggi) |
| /run/systemd/system/ | Unit yang dibuat saat runtime |
| /usr/lib/systemd/system/ | Unit yang diinstal paket |
| ~/.config/systemd/user/ | Unit tingkat pengguna |
Unit Layanan Dasar
[Unit]
Description=My Application
After=network.target
[Service]
ExecStart=/usr/bin/myapp --config /etc/myapp.conf
Restart=on-failure
User=appuser
[Install]
WantedBy=multi-user.target
Terapkan Perubahan
systemctl daemon-reload # reload unit files
systemctl restart myapp # apply changes
Timer
Unit Timer
[Unit]
Description=Run backup daily
[Timer]
OnCalendar=*-*-* 02:00:00
Persistent=true
[Install]
WantedBy=timers.target
Sintaks OnCalendar
| *-*-* 02:00:00 | Setiap hari pukul 02:00 |
| Mon *-*-* 09:00:00 | Setiap Senin pukul 09:00 |
| *-*-01 00:00:00 | Hari pertama setiap bulan |
| hourly / daily / weekly | Jadwal singkat |
Manajemen Timer
systemctl list-timers --all
systemctl start backup.timer
systemctl enable backup.timer
systemd-analyze calendar "daily"
Target
Target Umum
| multi-user.target | Boot normal, multi-pengguna, tanpa GUI |
| graphical.target | Desktop GUI lengkap |
| rescue.target | Mode rescue single-user |
| emergency.target | Shell minimal, hanya root |
| network-online.target | Jaringan sudah terkonfigurasi penuh |
| timers.target | Semua unit timer siap |
Perintah Target
systemctl get-default
systemctl set-default multi-user.target
systemctl isolate rescue.target
systemctl list-dependencies graphical.target
Journalctl
Melihat Log
journalctl -u nginx # logs for unit
journalctl -u nginx -f # follow (tail)
journalctl -u nginx --no-pager
journalctl -b # current boot only
Filter Log
journalctl --since "2026-03-01"
journalctl --since "1 hour ago"
journalctl -p err # errors and above
journalctl _PID=1234
Level Prioritas
| emerg (0) | Sistem tidak dapat digunakan |
| alert (1) | Tindakan segera diperlukan |
| crit (2) | Kondisi kritis |
| err (3) | Kondisi error |
| warning (4) | Kondisi peringatan |
| info (6) | Informasional |
| debug (7) | Pesan level debug |
Pemeliharaan Log
journalctl --disk-usage
journalctl --vacuum-size=500M
journalctl --vacuum-time=30d
Jaringan
networkctl
networkctl list
networkctl status eth0
networkctl up eth0
networkctl down eth0
systemd-resolve
resolvectl status
resolvectl query example.com
resolvectl flush-caches
resolvectl statistics
Tunggu Jaringan
# In unit file [Unit] section:
After=network-online.target
Wants=network-online.target
Mount
Unit Mount
[Unit]
Description=Mount data volume
[Mount]
What=/dev/sdb1
Where=/mnt/data
Type=ext4
Options=defaults,noatime
[Install]
WantedBy=multi-user.target
Unit Automount
[Unit]
Description=Automount data on access
[Automount]
Where=/mnt/data
TimeoutIdleSec=300
[Install]
WantedBy=multi-user.target
Konvensi Penamaan
| /mnt/data | File unit: mnt-data.mount |
| /var/lib/app | File unit: var-lib-app.mount |
Path mount dengan `/` diganti `-`, tanda hubung awal dihilangkan
Environment
Mengatur Variabel Environment
[Service]
Environment=APP_ENV=production
Environment=PORT=8080
EnvironmentFile=/etc/myapp/env
Format File Environment
# /etc/myapp/env
APP_ENV=production
DATABASE_URL=postgres://localhost/db
SECRET_KEY=changeme
Hardening Layanan
| ProtectSystem=strict | Filesystem hanya-baca kecuali path yang diizinkan |
| ProtectHome=true | Sembunyikan /home, /root, /run/user |
| NoNewPrivileges=true | Cegah eskalasi hak istimewa |
| PrivateTmp=true | /tmp terisolasi untuk layanan |
| ReadWritePaths=/var/lib/myapp | Izinkan penulisan ke path tertentu |
Dependensi
Direktif Urutan dan Ketergantungan
| After=b.service | Mulai setelah b (hanya urutan) |
| Before=b.service | Mulai sebelum b (hanya urutan) |
| Requires=b.service | Dependensi keras; gagal jika b gagal |
| Wants=b.service | Dependensi lunak; tidak gagal jika b gagal |
| BindsTo=b.service | Berhenti ketika b berhenti |
| Conflicts=b.service | Tidak bisa berjalan bersamaan dengan b |
Inspeksi Dependensi
systemctl list-dependencies nginx
systemctl list-dependencies --reverse nginx
systemd-analyze dot nginx.service | dot -Tsvg > deps.svg
Pola Umum
Kebijakan Restart
| Restart=no | Tidak pernah restart (default) |
| Restart=on-failure | Restart jika keluar dengan kode non-nol |
| Restart=always | Selalu restart (untuk daemon) |
| RestartSec=5 | Tunggu 5 detik sebelum restart |
| StartLimitBurst=3 | Maksimum restart dalam interval |
| StartLimitIntervalSec=60 | Interval untuk penghitungan burst |
Override Tanpa Mengedit
systemctl edit nginx # creates drop-in
# /etc/systemd/system/nginx.service.d/override.conf
systemctl cat nginx # show effective config
systemctl revert nginx # remove overrides
Analisis Sistem
systemd-analyze # boot time
systemd-analyze blame # per-unit time
systemd-analyze critical-chain
systemctl list-units --failed