systemctl adalah perintah utama untuk mengelola layanan pada sistem yang menjalankan systemd. Topik ini merangkai alur kerjanya, dari memeriksa keadaan, menjalankan serta menghentikan layanan, sampai membuat layanan aktif secara permanen. Perintah status, start, stop, restart, enable, dan disable dibahas bersama cara membaca hasilnya. Pola kerja yang sama berlaku untuk layanan bawaan distro maupun layanan kustom yang berkas unitnya ditulis sendiri.
Klien dari manajer layanan#
systemctl adalah klien baris perintah yang menyampaikan permintaan kepada systemd melalui D-Bus, yaitu saluran komunikasi antarproses milik sistem. systemd-lah yang benar-benar menjalankan, menghentikan, dan mengawasi proses layanan, sedangkan systemctl hanya mengirimkan permintaan lalu menampilkan jawabannya. Pemisahan ini membuat perilaku systemctl seragam untuk semua jenis unit, karena yang mengeksekusi operasi tetap systemd, bukan perintahnya. Konsekuensinya, systemctl hanya berfungsi pada sistem dengan systemd yang sedang berjalan. Container dan lingkungan minimal yang proses pertamanya bukan systemd menolak perintah ini dengan pesan “System has not been booted with systemd”, sebagaimana yang terjadi pada lingkungan latihan jalur ini.
Karena seluruh operasi melewati satu manajer yang sama, keadaan layanan tidak pernah ambigu. Tidak ada kemungkinan satu layanan dijalankan dua kali dengan cara berbeda, dan kegagalan salah satu operasi langsung terlihat pada jawaban systemd. Sifat inilah yang membedakan pengelolaan layanan era systemd dari era skrip init yang tersebar di banyak berkas.
Alur kerja start, stop, dan restart#
Perintah dasar untuk menggerakkan layanan mengikuti pola systemctl aksi nama-unit. Tabel berikut merangkum aksi yang paling sering dipakai, dengan ssh.service sebagai contoh layanannya.
| Perintah | Efek |
|---|---|
systemctl start ssh | menjalankan layanan sekarang |
systemctl stop ssh | menghentikan layanan |
systemctl restart ssh | menghentikan lalu menjalankan kembali, dipakai setelah konfigurasinya berubah |
systemctl reload ssh | meminta layanan membaca ulang konfigurasi tanpa memutus proses utama, bila layanannya mendukung |
systemctl status ssh | menampilkan keadaan terkini layanan |
# tidak-dijalankan
# systemctl menuntut systemd yang berjalan, sedangkan sandbox ini adalah container tanpa systemd
systemctl start ssh
systemctl status sshBanyak aksi systemctl tidak mencetak apa pun ketika berhasil, sehingga keberhasilannya diverifikasi dengan systemctl status atau systemctl is-active. Aksi start pada unit yang sedang berjalan tidak melakukan apa pun, dan aksi stop pada unit yang sudah berhenti juga senyap. Kedua aksi itu aman dipanggil berulang tanpa pemeriksaan keadaan lebih dahulu.
Perbedaan restart dan reload perlu diperhatikan ketika konfigurasi layanan disunting. restart benar-benar mengganti prosesnya, sehingga seluruh koneksi yang sedang terbuka terputus, sedangkan reload hanya meminta proses utama membaca ulang berkas konfigurasinya tanpa memutus apa pun. Layanan web lazim mendukung keduanya, dan reload menjadi pilihan yang lebih aman apabila tersedia pada layanan.
Membaca keluaran status#
# tidak-dijalankan
# perintah ini menampilkan keadaan lengkap satu layanan pada mesin dengan systemd
systemctl status sshKeluaran status tersusun atas beberapa baris kunci yang masing-masing menjawab satu pertanyaan. Baris Loaded menampilkan berkas unit yang dipakai beserta status aktivasi jangka panjangnya. Status itu berupa enabled untuk unit yang aktif saat boot, disabled untuk yang tidak, dan static untuk unit tanpa bagian [Install].
Baris Active menampilkan keadaan berjalan, dengan active (running) untuk layanan yang sehat, inactive (dead) untuk yang berhenti, dan failed untuk yang berhenti karena error. Baris Main PID menunjuk proses utamanya, sedangkan bagian CGroup menampilkan seluruh proses anggota layanan tersebut. Beberapa baris terakhir keluaran berupa potongan log layanan itu, dan sumber lengkapnya dapat dikueri dengan journalctl.
Untuk pemeriksaan dari dalam skrip, keadaan yang ringkas lebih berguna daripada laporan panjang. Perintah systemctl is-active ssh hanya mencetak active atau inactive dan mengembalikan kode kembali yang sesuai, sehingga hasilnya dapat diuji oleh percabangan tanpa mengurai teks apa pun.
start untuk sekarang, enable untuk selalu#
Kesalahan yang paling sering terjadi pada pemula adalah menjalankan layanan pada sesi berjalan saja, lalu mendapatinya hilang setelah mesin dinyalakan ulang. Penyebabnya, start hanya berlaku untuk sesi saat ini, sedangkan keaktifan jangka panjang diatur oleh enable. Perintah enable membuat tautan simbolik (symlink) dari direktori wants milik target menuju berkas unit, sehingga target menarik unit itu setiap boot. Perintah disable menghapus tautan tersebut, sedangkan enable --now menggabungkan enable dengan start dalam satu perintah.
| Perintah | Sesi berjalan saat ini | Otomatis saat boot |
|---|---|---|
systemctl start ssh | berjalan | tidak |
systemctl enable ssh | tidak berubah | ya |
systemctl enable --now ssh | berjalan | ya |
systemctl disable ssh | tidak dihentikan | tidak |
# tidak-dijalankan
# aktivasi layanan kustom arsip-cadangan memerlukan systemd yang berjalan dan hak root
sudo systemctl daemon-reload
sudo systemctl enable --now arsip-cadangan.servicePerhatikan bahwa disable tidak menghentikan layanan yang sedang berjalan, dan stop tidak menghapus keaktifan saat boot. Kedua pasangan aksi itu mengurus lapisan yang berbeda, sehingga perubahan lengkap sering memerlukan dua perintah, misalnya stop diikuti disable untuk benar-benar memensiunkan sebuah layanan.
Pemeriksaan cepat dan pembaruan konfigurasi#
# tidak-dijalankan
# systemd tidak berjalan pada sandbox container, sehingga perintah yang menuntut manajernya gagal
systemctl is-active ssh
systemctl is-enabled ssh
systemctl list-unit-files --type=service
systemctl cat sshAksi is-active dan is-enabled menjawab dua pertanyaan berbeda, yaitu apakah layanan berjalan sekarang dan apakah layanan aktif saat boot. Aksi list-unit-files menampilkan seluruh berkas unit yang dikenal systemd beserta status aktivasi jangka panjangnya, sehingga berguna untuk mencari nama unit yang terlupa. Aksi cat menampilkan isi berkas unit yang sedang dipakai systemd, termasuk tambahan dari drop-in, yakni berkas kecil yang menimpa sebagian pengaturan unit aslinya, apabila ada. Perbedaan antara berkas asli dan berkas efektif pun langsung terlihat.
Aksi daemon-reload mendapat tempat khusus dalam alur kerja. systemd membaca seluruh berkas unit ke memorinya saat boot dan saat reload diminta, tetapi tidak memantau perubahan berkas di disk. Karena itu, setiap suntingan berkas unit baru berlaku setelah systemctl daemon-reload diberikan. Apabila aksi ini terlewat, systemd terus menggunakan versi lama berkas unit meskipun isinya sudah berubah.
Kesalahan umum#
- Mengira enable menjalankan layanan. enable hanya mengatur boot berikutnya, sehingga layanan yang baru di-enable tetap tidak berjalan sampai start atau enable –now diberikan.
- Lupa memberikan daemon-reload setelah menyunting berkas unit. systemd membaca berkas unit ke memorinya dan tidak memantau perubahan berkas, sehingga suntingan baru tidak berpengaruh sebelum reload.
- Memilih restart padahal reload cukup. restart memutus seluruh koneksi layanan, sedangkan reload hanya meminta proses utama membaca ulang konfigurasinya.
- Menilai keberhasilan dari diamnya systemctl. Kebanyakan aksi tidak mencetak apa pun saat berhasil, sehingga hasilnya wajib diperiksa dengan status atau is-active.
Ringkasan#
- systemctl adalah klien D-Bus untuk systemd, sehingga seluruh operasinya gagal pada sistem tanpa systemd yang berjalan.
- start, stop, restart, dan reload menggerakkan layanan pada sesi berjalan, sedangkan enable dan disable mengatur keaktifan layanan saat boot lewat tautan simbolik di direktori wants target.
- status menampilkan baris Loaded, Active, Main PID, dan CGroup beserta potongan log, sedangkan is-active dan is-enabled mengembalikan kode kembali yang siap diuji skrip.
- daemon-reload wajib diberikan setelah berkas unit disunting agar systemd membaca ulang berkasnya.
Referensi#
- systemctl(1) — freedesktop.org — Daftar lengkap aksi systemctl beserta perilakunya.
- systemctl(1) — Ubuntu manpages — Manual systemctl pada Ubuntu 24.04, versi yang dipakai jalur ini.
- systemd.service(5) — freedesktop.org — Opsi berkas unit layanan, termasuk perilaku Type= dan Restart=.