GNU/Linux >> Belajar Linux >  >> Linux

Bagaimana mengelola unit systemd saat start-up

Systemd adalah sistem init dan manajer sistem di sistem Linux dan kompatibel dengan LSB dan SysV. Anda dapat menggunakan suite systemd untuk mengelola dan mengoptimalkan layanan dan sumber daya sistem start-up di sistem Linux. Ini adalah alat praktis bagi sysadmin untuk mengaktifkan dan menjalankan sistem mereka, mengoptimalkan proses, men-debug, dan memecahkan masalah layanan sistem.

Artikel ini akan dibuat berdasarkan panduan seri systemd kami dan mengilustrasikan cara mengelola Unit sistem, pemasangan sistem file, memecahkan masalah, dan memberi Anda tip dan trik saat bekerja dengan sistem.

Panduan systemd pertama kami menyoroti mengapa systemd adalah alat praktis untuk sysadmin Linux. Yang kedua menggambarkan cara menjadwalkan tugas sistem dengan timer systemd dan mengotomatiskan tugas boot sistem yang membosankan.

Linux start-up

Sebagai pengguna Linux retro, saya selalu ada (masih ada) ketika sistem Fedora melakukan booting dan halaman demi halaman pesan diagnostik bergulir sebelum prompt login. Halaman-halaman ini berisi informasi tentang proses start-up, pemasangan sistem file, dan banyak lagi. Untuk memahami cara mengelola dan mengoptimalkan layanan start-up, mari kita lihat sekilas apa yang terjadi antara saat Anda menekan tombol power-on dan perintah login.

Proses boot dimulai dengan boot perangkat keras yang menginisialisasi perangkat keras sistem, boot OS yang memuat Kernel, lalu systemd, dan start-up Linux, di mana systemd menyiapkan proses sistem. Proses start-up dimulai ketika Kernel mentransfer kendali host ke systemd. Pada titik ini, sysadmin dapat mengelola layanan, Unit, soket, aktivasi D-Bus, melacak proses, daemon, dan titik pemasangan sistem file.

Komponen sistem

Berikut ini adalah beberapa blok penyusun rangkaian perangkat lunak systemd yang dapat Anda gunakan untuk mengelola startup Linux.

  • systemd-boot – pengelola boot UEFI.
  • systemd-firstboot – mengelola inisialisasi pengaturan sistem dasar sebelum boot pertama.
  • systemd-login – alat manajemen sesi.
  • systemd-networkd – mengelola konfigurasi jaringan.
  • systemd-sysusers  – alat untuk membuat grup pengguna sistem dan menambahkan pengguna ke grup saat boot.
  • systemd/Journal — mengelola logging sistem.
  • systemd/Timers — pengatur waktu untuk mengontrol file atau acara .service.

Systemctl

Untuk mengelola systemd, gunakan perintah systemctl, yang memanfaatkan fungsionalitas layanan SysVinit dan chkconfig. Anda dapat menggunakannya untuk mengelola unit sistem yang merupakan representasi dari layanan dan sumber daya sistem.

# systemctl daemon-reload

Manajemen Unit Sistem

Unit dalam systemd dapat berupa layanan (.service), titik pemasangan (.mount), perangkat (.device) atau soket (.socket). Systemctl menyediakan perintah yang berbeda untuk mengelola unit.

Gunakan perintah berikut untuk menganalisis status sistem:

$ systemctl status #Show system status 
$ systemctl or #List running units
$ systemctl list-units #List running units
$ systemctl --failed #List failed units
$ systemctl list-unit-files #List installed unit files1
$ systemctl status pid #Show process status for a PID

Gunakan perintah berikut untuk memeriksa status unit:

$ systemctl help unit #Show a manual page associated with a unit
$ systemctl status unit #Status of a unit
$ systemctl is-enabled unit #Check whether a Unit is enabled

Gunakan perintah berikut untuk memulai dan memuat ulang unit:

systemctl start unit  #start a unit immediately
systemctl stop unit   #stop a unit immediately
systemctl restart unit   #restart a unit
systemctl reload unit  #reload a unit and configurations
systemctl daemon-reload   #reload systemd manager configuration

Gunakan perintah berikut untuk menutupi Unit:

systemctl mask unit     #mask a Unit to make it impossible to start
systemctl unmask unit     #Unmask a unit

Gunakan perintah berikut untuk mengaktifkan unit:

systemctl enable Unit   #enable a Unit to start automatically at boot
systemctl enable --now unit   #enable a Unit to start automatically and immediately at boot
systemctl disable unit   #disable a Unit to no longer start at boot
systemctl reenable unit     #disable and enable anew

Mengedit File Unit

Linux memuat file Unit dari beberapa lokasi di sistem Anda. Anda dapat menjalankan perintah [systemctl show –property=UnitPath] untuk melihat daftar lengkapnya.

  •  /usr/lib/systemd/system/:unit yang disediakan oleh paket yang diinstal.
  •  /etc/systemd/system/:unit yang diinstal oleh sysadmin.

Contoh file satuan:

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=new dependency
After=new dependency

Menangani dependensi

Anda dapat mengatasi ketergantungan Unit dengan mendesain file unit dengan benar.
Misalnya, jika unit A memerlukan unit B untuk dijalankan sebelum A dimulai. Kemudian, tambahkan Requires=B dan After=B ke bagian [Unit] A.

# /etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B

Jika ketergantungan bersifat opsional, tambahkan Wants=B dan After=B.

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B
Wants=B

Catatan:Dependensi ditempatkan pada layanan dan bukan pada target.

Jenis layanan

Anda dapat menyetel berbagai jenis layanan awal dalam file layanan khusus dengan parameter Type=di bagian [Layanan]:

/etc/systemd/system/unit.d/example_unit.conf
[Unit]
Requires=B
After=B
Wants=B
[Service]
Type=simple
  • Type=simple (default):systemd menganggap layanan segera dimulai.
  • Type=forking:systemd menganggap layanan dimulai setelah proses bercabang dan induk telah keluar.
  • Jenis=oneshot:Anda dapat menggunakannya untuk skrip yang melakukan satu pekerjaan dan kemudian keluar. Anda dapat mengatur RemainAfterExit=yes sehingga systemd masih dapat menganggap layanan aktif setelah proses keluar.
  • Type=idle:systemd akan menunda eksekusi biner layanan hingga semua tugas dikirim.
  • Type=notify:Anda dapat menggunakannya seperti Type=simple, tetapi daemon akan memberi sinyal ke systemd jika sudah siap.
  • Jenis=dbus:layanan dianggap siap ketika NamaBus yang ditentukan muncul di bus sistem DBus.

File unit pengganti

Anda dapat mengganti file unit di [/usr/lib/systemd/system/] dengan membuat file unit baru dengan nama yang mirip dan mengaktifkan kembali Unit untuk memperbarui symlink.

# systemctl reenable Unit

Atau, Anda dapat menjalankan perintah [# systemctl edit –full Unit] yang membuka file unit di editor Anda dan secara otomatis memuat ulang saat Anda selesai mengedit.

# systemctl edit --full Unit

Berkas masuk

Anda dapat membuat file unit drop-in dengan membuat direktori /etc/systemd/system/unit.d/ dan menempatkan file .conf baru Anda. File akan menimpa atau menambahkan opsi konfigurasi baru. systemd akan mengurai dan menerapkan file-file ini di atas file Unit asli.

Atau, jalankan perintah berikut [# systemctl edit unit] untuk membuka file /etc/systemd/system/unit.d/new_override.conf dalam editor teks dan secara otomatis memuat ulang file Unit.

Mengembalikan perubahan file unit

Gunakan perintah berikut untuk mengembalikan perubahan apa pun yang Anda buat ke unit menggunakan perintah edit systemctl.

# systemctl revert unit

Tambahkan ketergantungan tambahan ke Unit

/etc/systemd/system/unit.d/newcustomdependency.conf
[Unit]
Requires=new customdependency
After=new customdependency

Manajemen daya

Systemd menyediakan perintah yang berbeda untuk mem-boot ulang atau mematikan sistem Anda.

systemctl reboot     #shut down and reboot the system
systemctl poweroff   #shut down and power-off the system
systemctl suspend     #suspend the system
systemctl hibernate    #put the system into hibernation
systemctl hybrid-sleep   #put the system into hybrid-sleep state

Pasang sistem file dan partisi

systemd bertanggung jawab untuk memasang partisi dan sistem file yang ditentukan dalam /etc/fstab. Anda dapat mengelola atau memasang sistem file dengan mendefinisikan semua parameter yang diperlukan dalam file unit. Sertakan detail sistem file dan titik pemasangan. Systemd memberi Anda lebih banyak fleksibilitas saat bekerja dengan unit pemasangan. Ia menggunakan file /etc/fstab untuk konfigurasi dan pemasangan sistem file. Prosesnya melibatkan penggunaan alat systemd-fstab-generator untuk membuat unit mount dari data dalam file fstab.

Buat unit pemasangan systemd

Ilustrasinya ada di Fedora 33 yang menjalankan sistem file btrfs.
Pastikan Anda memiliki ruang kosong di grup volume.

# lsblk

Daftar file unit mount yang tersedia:

[root@foss]# systemctl list-unit-files -t mount
OR
[root@foss]# systemctl status *mount

Buat file unit .mount systemd:

Periksa UUID sistem file menggunakan perintah blkid.

[root@foss]# blkid /dev/sda2
/dev/sda2: LABEL="fedoraworkstation33" UUID="688a6af2-xxx-4da4-xxx-878c5b0f063b" UUID_SUB="690a86e7-yyyy-9a92-4bc6-49cca4yyyy8df" BLOCK_SIZE="4096" TYPE="btrfs" PARTUUID="0byyyb88-02"

Buat file baru [var-lib-docker.mount] di direktori etc/systemd/system. Tambahkan data konfigurasi di bawah ini. Perhatikan bahwa nama file unit dan titik pemasangan harus sama.

# vi /etc/systemd/system/var-lib-docker.mount
[Unit]
Description=docker mount
[Mount]
What=/dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063b
Where=/var/lib/docker
Type=btrfs
Options=defaults
[Install]
WantedBy=multi-user.target

Perhatikan bahwa argumen “what” dapat membawa UUID, LABEL, dan jalur ke disk.

Deskripsi di bagian [Unit] menyediakan nama mount, ditampilkan dengan systemctl -t mount. Data konfigurasi di bagian [Mount] berisi data yang sama di file fstab.

Aktifkan Unit Mount untuk memulai setelah boot:

[root@foss]# systemctl enable var-lib-docker.mount
Created symlink /etc/systemd/system/multi-user.target.wants/var-lib-docker.mount → /etc/systemd/system/var-lib-docker.mount.

Perintah tersebut membuat symlink di direktori /etc/systemd/system, memungkinkan Unit mount untuk dipasang pada semua boot berikutnya.

Mulai dan pasang sistem file:

# systemctl start var-lib-docker.mount

Verifikasi bahwa sistem file telah dipasang:

# systemctl status var-lib-docker.mount
● var-lib-docker.mount - Docker mount
Loaded: loaded (/etc/systemd/system/var-lib-docker.mount; enabled; vendor preset: disabled)
Active: inactive (dead)
Where: /var/lib/docker
What: /dev/disk/by-uuid/688a6af2-77e1-4da4-bc63-878c5b0f063b

Anda juga dapat memodifikasi file unit layanan buruh pelabuhan untuk memastikan layanan hanya dimulai setelah layanan mount dipanggil.

# cat /usr/lib/systemd/system/docker.service
[Unit]
Description=docker service unit file
After=network.target var-lib-docker.mount # Added mount unit for docker service to wait
Requires=docker.socket

Nyalakan ulang dan periksa status unit layanan pemasangan.

# systemctl reboot
# systemctl status var-lib-docker.mount

Periksa titik pemasangan [var-lib-docker]:

# mount | grep var-lib-docker

Tips dan trik

Jalankan layanan setelah jaringan aktif

Anda dapat menunda layanan dari mulai hingga setelah jaringan aktif dan berjalan dengan menambahkan dependensi berikut ke file .service Anda.

/etc/systemd/system/test_foo.service
[Unit]
Wants=network-online.target
After=network-online.target

Selain itu, Anda dapat menambahkan nss-lookup.target jika suatu layanan perlu melakukan kueri DNS.

/etc/systemd/system/test_foo.service
[Unit]
Wants=network-online.target
After=network-online.target nss-lookup.target
...

Gunakan perintah berikut untuk memeriksa layanan mana yang menarik nss-lookup.target.

# systemctl list-dependencies --reverse nss-lookup.target

Instal alat konfigurasi GUI systemd

Anda juga dapat bekerja dengan systemd menggunakan alat GUI berikut.

  • SystemdGenie – adalah alat manajemen systemd berdasarkan KDE.
  • Systemadm – adalah browser grafis untuk unit systemd.

pengoptimalan systemd

Systemd menawarkan waktu booting cepat <2 detik untuk lingkungan desktop terbaru. Namun, kami dapat mengoptimalkannya lebih lanjut tanpa harus menulis kode apa pun dengan langkah-langkah berikut:

  •  Pertama, pertimbangkan untuk mengabaikan initrd jika Anda menggunakannya di sistem Anda.
  • Pertimbangkan untuk menonaktifkan SELinux dan mengaudit dengan menambahkan selinux=0 pada baris perintah kernel. Namun, perhatikan bahwa sysadmin menyarankan agar SElinux tetap aktif karena alasan keamanan.
  • Pertimbangkan untuk mencopot Syslog dan gunakan jurnal sebagai gantinya. Jurnal adalah alat pencatatan default di sistem systemd yang lebih baru.
  • Jika output konsol Anda lambat, gunakan tanda silent pada baris perintah dan nonaktifkan log debug sistem.
  • Pertimbangkan untuk menghapus cron dan gunakan timer systemd sebagai gantinya.
  • Gunakan lingkungan desktop modern seperti GNOME 40 yang tidak menggunakan ConsoleKit.
  • Periksa dan nonaktifkan proses atau layanan boot yang tidak perlu. Boot sistem menjadi lebih cepat jika Anda memulai lebih sedikit proses saat boot-up.
  • Harap singkirkan layanan berbasis shell seperti skrip init SysV dan ganti dengan file unit.
  • Hindari penggunaan Type=forking dan dependensi pemesanan. Sebagai gantinya, ganti dengan aktivasi soket dan Type=simple bila memungkinkan. Ini akan memungkinkan permulaan layanan yang paralel dengan lebih baik.

Pemecahan Masalah

Selidiki layanan yang gagal

Gunakan perintah berikut untuk menemukan layanan systemd yang gagal dimulai:

# systemctl --state=failed

Mendiagnosis layanan

Anda juga bisa mendapatkan lebih banyak informasi pemecahan masalah tentang layanan dengan menyetel variabel lingkungan SYSTEMD_LOG_LEVEL ke debug.
Misalnya, untuk menjalankan daemon systemd-networkd dalam mode debug, tambahkan file drop-in untuk layanan dan tambahan berikut konfigurasi.

[Service]
Environment=SYSTEMD_LOG_LEVEL=debug

Atau, Anda dapat mengatur variabel lingkungan secara manual dengan perintah berikut:

# SYSTEMD_LOG_LEVEL=debug /lib/systemd/systemd-networkd

Setelah menyelesaikan pengaturan Anda, mulai ulang layanan dan pantau jurnal layanan dengan opsi -f/–ikuti untuk melihat semua log.

Log sistem

Log sistem menyimpan riwayat aktivitas sistem seperti waktu boot-up, saat layanan diluncurkan, pekerjaan sistem, layanan latar belakang, aktivitas yang gagal, dan banyak lagi. Systemd memelihara "katalog" kesalahan, pesan, solusi yang mungkin, dan menyoroti konteks penting dalam pesan log yang mungkin luput dari perhatian. Anda dapat meninjau log systemd dengan perintah journalctl.

$ journalctl --pager-end

Bendera –pager-end memulai tinjauan log Anda di akhir keluaran journalctl.

Sumber daya tambahan

  1. Halaman manual unit Systemd.
  2. Panduan sistem proyek Fedora.
  3. Deskripsi systemd dari Freedesktop.org.
  4. Systemd ArchWiki.

Menutup

systemd menyediakan cara yang kuat untuk mengelola start-up Linux dengan unit systemd. Artikel tersebut telah menyoroti berbagai cara untuk menggunakan perintah systemctl untuk mengedit file unit, mengelola unit systemd. Itu telah menyoroti cara membuat unit pemasangan systemd baru untuk memasang sistem file baru dan mengaktifkannya untuk memulai selama start-up. Terakhir, saya telah membagikan beberapa kiat pengoptimalan systemd dan cara memecahkan masalah layanan yang gagal.


Linux
  1. Bagaimana Mengelola Kemampuan File Linux

  2. Cara Mengelola Layanan Systemd dengan Systemctl di Linux

  3. Pengantar singkat untuk unit jalur

  1. Cara Menggunakan Perintah Systemctl untuk Mengelola Layanan Systemd

  2. Cara membuat layanan Systemd di Linux

  3. Cara mengaktifkan systemd di WSL2:Ubuntu 20 dan CentOS 8

  1. Menggunakan perintah systemctl untuk mengelola unit systemd

  2. Cara Mengelola Kata Sandi Akun di Linux

  3. Bagaimana mengelola Layanan Linux dengan perintah systemctl