Sebuah service bisa menyala, dimatikan, dimuat ulang konfigurasinya, dipersiapkan untuk boot berikutnya, atau dilarang menyala sama sekali — dan tiap keadaan punya perintahnya sendiri. Mengelola siklus hidup inilah pekerjaan sehari-hari administrator, dan systemctl adalah satu-satunya pintu masuknya. Perintah pengendali menuntut hak root, jadi pada sesi user biasa kita awali dengan sudo. Chapter ini menuntun empat keluarga perintah — pengendalian langsung, pengaturan boot, pelarangan total, dan pemeriksaan status — memakai satu unit contoh yang kita tulis sendiri.
Empat Kata Kerja Inti: start, stop, restart, reload #
Empat perintah berikut adalah keseharian administrator; jalankan berurutan pada service mana pun:
sudo systemctl start aplikasi.service
sudo systemctl stop aplikasi.service
sudo systemctl restart aplikasi.service
sudo systemctl reload aplikasi.servicestart menjalankan perintah di ExecStart. stop mengirim SIGTERM ke seluruh cgroup service, menunggu batas waktu (default 90 detik), lalu SIGKILL bagi yang menolak mati — proses anak ikut berhenti karena seluruh kelompok kena, bukan hanya induknya. restart menjalankan keduanya berurutan: berhenti lalu menyala lagi.
reload berbeda dari restart: systemd menjalankan perintah ExecReload bila unit punya directive itu, atau mengirim SIGHUP bila tidak. Tujuannya memuat ulang konfigurasi tanpa memutus proses — misalnya web server membaca ulang file konfigurasi sambil tetap melayani koneksi yang sedang berjalan. Bila unit tidak mendukung reload, systemctl reload-or-restart aplikasi.service memakai jalur fallback: coba reload, gagal maka restart. Kita sudah pernah melihat ExecReload bekerja pada dbus.service di Chapter systemd Units
.
enable dan disable: Urusan Boot Berikutnya #
Kesalahpahaman terbesar pemula systemd ada di sini, jadi kita lambatkan sejenak. start menyalakan service sekarang; enable hanya mempersiapkannya agar menyala saat boot berikutnya — dua sumbu yang berbeda dan tidak saling menjamin. Mari kita tulis unit contoh yang layak diaktifkan:
cat > aplikasi.service << 'EOF'
[Unit]
Description=Aplikasi web internal kantor
[Service]
ExecStart=/usr/bin/python3 -m http.server 8080
[Install]
WantedBy=multi-user.target
EOF
systemd-analyze verify aplikasi.service && echo "sintaks unit valid"Output yang Dihasilkan:
sintaks unit validMari kita telaah blok di atas:
- Baris 1-9 (
cat > aplikasi.service): unit minimalis — sebuah server statis Python pada port 8080. Section[Install]denganWantedBy=multi-user.targetadalah kunci pengaktifan: unit menyatakan “tarik saya saat target multi-user dinyalakan”. - Baris 10 (
systemd-analyze verify ...): memeriksa sintaks berkas tanpa menjalankannya, layaknyabash -nuntuk shell script — kebiasaan murah yang menghemat troubleshooting.
Pada sistem nyata, berkas itu disalin ke /etc/systemd/system/ dengan sudo, lalu sudo systemctl enable aplikasi.service dijalankan. Apa yang dilakukan perintah itu? Jawabannya sederhana dan bisa dibuktikan: membuat symlink di folder .wants milik target. Paket-paket di sistem ini sudah memakai mekanisme yang sama:
readlink /etc/systemd/system/timers.target.wants/apt-daily.timer
ls -1 /etc/systemd/system/timers.target.wants/Output yang Dihasilkan:
/lib/systemd/system/apt-daily.timer
apt-daily-upgrade.timer
apt-daily.timer
dpkg-db-backup.timer
fstrim.timerBaris pertama menunjukkan symlink apt-daily.timer menunjuk kembali ke berkas aslinya di /lib/systemd/system/ — persis seperti yang enable buat untuk unit kita. Daftar di bawahnya adalah semua timer yang diaktifkan lewat folder timers.target.wants itu. disable membalik prosesnya: menghapus symlink, sehingga unit tidak lagi ikut boot — proses yang sedang berjalan tidak tersentuh.
Status pengaktifan bisa ditanya tanpa membuka berkas mana pun. Tiga unit berikut sengaja dipilih karena jawabannya berbeda-beda:
systemctl is-enabled dbus getty@tty1 cryptdisks-early.serviceOutput yang Dihasilkan:
static
enabled
maskedTiga jawaban itu mewakili tiga keadaan: enabled berarti symlinknya ada, static berarti unit tanpa section [Install] sehingga hanya bisa ditarik unit lain (seperti dbus.service yang sudah kita bedah), dan masked berarti unit itu dilarang — keadaan yang punya perintahnya sendiri.
mask: Melarang Service Menyala Total #
sudo systemctl mask cryptdisks-early.service mengganti berkas unit dengan symlink ke /dev/null. Unit ter-mask tidak bisa distart manual, tidak bisa ditarik dependensinya, dan tidak bisa diaktifkan — berguna untuk service bermasalah yang selalu bangkit sendiri. unmask mengembalikan keadaan semula. Ini kunci terkuat: lebih keras daripada stop (yang hanya berlaku sampai service dinyalakan lagi) maupun disable (yang hanya urusan boot).
Membaca Kondisi dengan status #
Untuk melihat segalanya sekaligus, systemctl status adalah perintah utama. Berikut contoh tampilan hasil systemctl status ssh.service pada server Debian:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/lib/systemd/system/ssh.service; enabled; preset: enabled)
Active: active (running) since Mon 2026-01-19 06:12:44 WIB; 6h ago
Docs: man:sshd(8)
man:sshd_config(5)
Main PID: 812 (sshd)
Tasks: 1 (limit: 4662)
Memory: 3.5M
CPU: 45ms
CGroup: /system.slice/ssh.service
└─812 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startups
Jan 19 06:12:44 server-kantor systemd[1]: Starting ssh.service - OpenBSD Secure Shell server...
Jan 19 06:12:44 server-kantor systemd[1]: Started ssh.service - OpenBSD Secure Shell server.Baris Loaded memuat path berkas pemenang beserta status enable-nya, Active: active (running) menegaskan service hidup sejak waktu yang tertera, dan CGroup menampilkan pohon proses milik service — cukup satu proses sshd di sini. Dua baris terakhir adalah cuplikan log journald, pintu diagnosis pertama saat service macet. Untuk pertanyaan ya-tidak yang bisa dipakai script, gunakan systemctl is-active ssh.service yang menjawab satu kata seperti active. Daftar lengkap semua perintah dan kolomnya ada di systemctl(1)
.
daemon-reload: Memberi Tahu systemd #
systemd menyimpan definisi unit yang sudah dimuat di memori. Setiap kali kita mengubah berkas unit — milik paket di /lib, salinan di /etc, maupun drop-in dari systemctl edit — definisi lama tetap dipakai sampai kita memberi tahu:
sudo systemctl daemon-reloadDengan empat keluarga perintah ini, service sudah sepenuhnya dalam kendali kita. Namun systemctl masih punya satu rak lagi yang belum kita buka: perintah-perintah untuk melihat — mendaftar unit, membaca definisi, dan mengintip properti runtime. Itulah fokus Chapter systemctl
.