systemd: memeriksa layanan, aktivasi saat boot, dan log

Pada Linux yang memakai systemd, proses boot berlangsung dari firmware dan bootloader ke kernel, lalu systemd mengaktifkan layanan serta unit lain. Untuk memeriksa layanan, gunakan systemctl untuk melihat keadaan saat ini dan pengaturan aktivasi otomatis secara terpisah, kemudian baca log dari boot yang sama dengan journalctl. Layanan yang aktif sekarang belum tentu diatur untuk mulai saat boot.

Panduan ini memperkenalkan keadaan layanan, cara memulainya, dan pengaturan aktivasi otomatis. Untuk menggabungkan beberapa bukti guna mempersempit penyebab gangguan, lihat panduan analisis gangguan berdasarkan log berbahasa Inggris.

Rujukan latihan konfigurasi adalah mesin virtual (VM) dengan instalasi biasa Ubuntu 26.04 LTS, yaitu rilis dengan dukungan jangka panjang, atau Rocky Linux seri 9. Konfigurasi layanan serta paket dapat berbeda pada kontainer, Windows Subsystem for Linux (WSL), dan rilis lain. Siapkan pemulihan melalui konsol dan catat versi lingkungan dengan mengikuti panduan persiapan mesin virtual berbahasa Inggris.

Memahami tahapan utama proses boot

Pada PC atau server biasa, firmware menginisialisasi perangkat keras dan mencari bootloader, yaitu pemuat awal sistem. Bootloader memuat kernel serta lingkungan awal yang diperlukan. Kernel menyiapkan perangkat, memori, dan dasar eksekusi proses, lalu sistem inisialisasi mengelola layanan di ruang pengguna. Panduan ini berlaku ketika systemd menjadi proses dengan pengenal proses (PID) 1. Kontainer atau distribusi dengan sistem inisialisasi lain dapat memerlukan perintah dan penjelasan berbeda.

ps -p 1 -o pid,comm,args
systemctl get-default

Periksa kolom COMMAND atau ARGS pada hasil pertama untuk mengetahui apakah PID 1 adalah systemd. Hasilnya dapat berbeda dalam kontainer atau lingkungan khusus. Perintah kedua menampilkan target bawaan. Misalnya, multi-user.target umumnya menyatakan tujuan lingkungan banyak pengguna tanpa antarmuka grafis, sedangkan graphical.target dapat menyatakan tujuan lingkungan grafis. Target mengelompokkan unit; keberadaannya tidak berarti semua layanan dimulai satu per satu dalam urutan tunggal.

Memahami unit systemd dan dependensi

systemd menyatakan objek yang dikelolanya sebagai unit. Unit .service mengelola layanan; .target mengelompokkan unit untuk mencapai suatu tujuan; .socket dapat mengaktifkan layanan berdasarkan akses melalui soket; dan .timer menjadwalkan suatu tindakan. Paket program serta unit layanannya harus benar-benar terpasang. Jangan menebak nama unit lalu memulai atau menghentikannya pada server operasional.

Urutan mulai mengikuti dependensi dan aturan pengurutan ant-unit, bukan nomor sederhana. Aturan yang menempatkan suatu unit setelah unit lain tidak dengan sendirinya menjadikan unit lain itu dependensi wajib. Beberapa unit berjalan secara paralel, sehingga posisi dalam daftar saja tidak cukup untuk menetapkan penyebab boot yang lambat.

systemctl list-units --type=service --state=running
systemctl --failed

Perintah pertama menampilkan unit layanan yang dimuat dan sedang berjalan; perintah kedua menampilkan unit dalam keadaan gagal. Daftar kegagalan yang kosong tidak membuktikan aplikasi merespons dengan benar. Anda mungkin tetap perlu memeriksa respons aplikasi, port, atau log aplikasinya sendiri.

Membedakan keadaan aktif dan pengaturan aktivasi otomatis

active menyatakan keadaan aktif saat ini sesuai jenis unit. Untuk layanan, keadaan aktif tidak selalu berarti proses terus berjalan; layanan sekali jalan dapat tetap berstatus active (exited). enabled biasanya berarti tautan pemasangan telah dibuat agar unit dapat diaktifkan melalui target, misalnya saat boot. Layanan dapat berstatus active tetapi disabled, atau enabled tetapi saat ini gagal. Unit static dapat tidak memiliki aturan pemasangan untuk di-enable langsung, tetapi tetap berjalan karena diperlukan atau diaktifkan unit lain.

Perintah Yang diperiksa atau diubah Batasnya
systemctl status NAME.service Keadaan saat ini dan ringkasan log terbaru Bukan pengganti seluruh jurnal
systemctl is-active NAME.service Apakah unit aktif sekarang? Tidak menunjukkan pengaturan aktivasi otomatis
systemctl is-enabled NAME.service Apakah aktivasi otomatis dikonfigurasi? Tidak menunjukkan apakah layanan sedang berjalan
systemctl start NAME.service
systemctl stop NAME.service
Memulai atau menghentikan sekarang Tidak dengan sendirinya mengubah pengaturan aktivasi saat boot
systemctl enable NAME.service
systemctl disable NAME.service
Membuat atau menghapus tautan pemasangan untuk aktivasi otomatis Tanpa opsi tambahan, tidak langsung mengubah keadaan berjalan saat ini

NAME.service adalah nama pengganti yang harus diubah menjadi nama unit terpasang. Dua perintah pada satu baris tabel menunjukkan pilihan tindakan yang berbeda, bukan urutan yang harus selalu dijalankan. Perubahan pada layanan sistem biasanya memerlukan hak administrator yang sesuai. Menghentikan layanan Secure Shell (SSH) yang dipakai untuk akses jarak jauh dapat memutus koneksi Anda; periksa dampak dan jalur pemulihan sebelum mengubah layanan operasional.

disable bukan larangan untuk semua cara aktivasi. Unit yang dinonaktifkan masih dapat dimulai secara manual atau diaktifkan oleh dependensi, soket, maupun pemicu lain. Periksa hubungan tersebut ketika layanan tampak mulai kembali.

Memeriksa layanan dengan perintah baca saja

systemd-journald.service lazim tersedia pada sistem berbasis systemd, tetapi citra minimal atau lingkungan khusus dapat berbeda. Perintah berikut hanya memeriksa keadaan.

systemctl status systemd-journald.service
systemctl is-active systemd-journald.service
systemctl is-enabled systemd-journald.service

status dapat menampilkan informasi pemuatan, keadaan saat ini, proses, dan beberapa entri jurnal terbaru. is-active dapat menampilkan active, inactive, atau failed, serta mengembalikan status keluar bukan nol ketika unit tidak aktif. is-enabled dapat menampilkan enabled, disabled, static, dan keadaan lain. Jangan menganggap static sebagai kesalahan dengan sendirinya.

Memahami perintah sebelum mengubah layanan

Jika perubahan memang diperlukan, start dan stop memengaruhi keadaan saat ini, sedangkan enable dan disable memengaruhi pengaturan aktivasi otomatis. restart menghentikan lalu memulai layanan dan dapat mengganggu koneksi atau pekerjaan. reload meminta layanan membaca ulang konfigurasinya jika layanan mendukung operasi itu; dampaknya bergantung pada layanan. enable --now meminta aktivasi otomatis sekaligus upaya memulai layanan sekarang.

Setelah membuat atau mengedit berkas unit, daemon-reload dapat diperlukan agar pengelola systemd membaca ulang definisi unit. Operasi itu berbeda dari restart, yang memulai ulang proses aplikasi, dan reload milik layanan, yang dapat membaca ulang konfigurasi aplikasi. Siapkan cadangan dan waktu pemeliharaan sebelum mengubah unit atau konfigurasi aplikasi operasional.

Membaca log boot saat ini dengan journalctl

Jurnal systemd dapat menghimpun pesan dari layanan, kernel, dan sumber lain. -b memilih boot saat ini, -u memilih unit, dan -n 30 meminta 30 entri terbaru. --no-pager menampilkan hasil langsung tanpa penampil halaman interaktif. Tanpa izin yang sesuai, Anda mungkin hanya melihat sebagian pesan; administrator yang berwenang dapat memeriksa sisanya.

journalctl -b -u systemd-journald.service -n 30 --no-pager
journalctl -b -p warning -n 30 --no-pager
journalctl --list-boots

Perintah pertama menampilkan entri terbaru untuk unit tersebut selama boot ini. Perintah kedua memilih pesan dengan prioritas warning atau yang lebih serius. Satu peringatan belum tentu merupakan penyebab gangguan; baca waktu kejadian serta pesan di sekitarnya. Jika --list-boots tidak menampilkan boot terdahulu, kebijakan penyimpanan atau retensi jurnal mungkin membuat lognya tidak tersedia. Pastikan rekamannya memang ada sebelum menyelidiki boot sebelumnya.

Urutan diagnosis ketika layanan tidak mau mulai

  1. Pastikan nama unit yang tepat dan apakah paketnya terpasang. Jangan memanipulasi unit bernama mirip berdasarkan dugaan.
  2. Gunakan systemctl status untuk memeriksa keadaan pemuatan, keadaan saat ini, ringkasan kegagalan, dan pesan terbaru.
  3. Baca konteks yang lebih luas dari boot yang sama dengan journalctl -b -u diikuti nama unit. Cari bukti kesalahan konfigurasi, masalah izin, konflik port, atau dependensi yang gagal.
  4. Periksa konfigurasi, sumber daya, dan dependensi terkait; buat cadangan sebelum mengubahnya. Jangan melonggarkan izin secara luas hanya berdasarkan satu baris log.
  5. Setelah penyebab diperbaiki, lakukan hanya tindakan yang diperlukan pada waktu yang sesuai, kemudian periksa is-active dan respons aplikasi yang sebenarnya.

Untuk boot yang lambat, systemd-analyze critical-chain membantu melihat jalur aktivasi yang penting. Durasi suatu unit yang panjang dalam systemd-analyze blame tidak membuktikan unit itu menunda seluruh boot. Eksekusi paralel dan dependensi memengaruhi hasil; kedua tampilan juga tidak mencakup semua jenis penundaan atau semua pekerjaan yang kehabisan waktu.

Dokumentasi resmi

Manual systemctl(1) menjelaskan keadaan dan perubahan unit. Manual journalctl(1) membahas penyaringan berdasarkan boot, unit, serta prioritas. Manual systemd.unit(5) menjelaskan hubungan dependensi dan pengurutan. Batas analisis waktu mulai dibahas dalam manual systemd-analyze dari proyek systemd.