Tutorial Ubuntu 26.04 / Mengubah konfigurasi layanan dengan validasi dan drop-in

Ubah konfigurasi layanan dengan mencatat berkas asal dan nilai yang berlaku, membuat perubahan terpisah, memvalidasinya, lalu memeriksa hasil eksekusi. Memuat ulang unit systemd, meminta aplikasi membaca ulang konfigurasi, dan memulai ulang proses adalah tiga tindakan berbeda.

Temukan unit asal dan drop-in

Unit adalah definisi objek yang dikelola systemd; unit layanan memakai akhiran .service. Drop-in adalah berkas .conf tambahan untuk mengubah bagian tertentu tanpa menyunting unit asal. Untuk layanan yang benar-benar akan diubah, jalankan systemctl cat NAMA.service dan systemctl show NAMA.service -p FragmentPath -p DropInPaths setelah mengganti nama contoh. Simpan hasil awal beserta salinan berkas lokal yang akan disentuh.

Berkas paket biasanya berada di /usr/lib/systemd/system; penyuntingan langsung dapat tertimpa pembaruan. Tempatkan perubahan lokal pada direktori drop-in di /etc/systemd/system. Menurut manual systemd.unit, drop-in bernama berbeda dibaca menurut urutan leksikografis. Direktori, nama yang sama, alias, dan drop-in yang lebih umum juga memengaruhi prioritas. Jangan menganggap awalan 10- selalu menjadi nilai terakhir.

Buat layanan latihan yang terpisah

Gunakan VM Ubuntu khusus latihan yang menjalankan systemd, memiliki sudo, systemctl, systemd-analyze, journalctl, dan /usr/bin/printenv. Contoh berikut tidak memerlukan perubahan pada aplikasi server sebenarnya. Periksa dahulu systemctl cat ubuntu-course-lab.service, statusnya, dan direktori terkait. Jika nama tersebut sudah dipakai atau asalnya meragukan, pilih nama baru dan sesuaikan semua jalur serta perintah. Pesan unit tidak ditemukan memang dapat muncul untuk nama yang belum dibuat; itu bukan alasan menimpa berkas lain.

Jalankan seluruh blok di shell. set -C menolak penimpaan berkas biasa yang sudah ada, sedangkan set -eu menghentikan blok saat perintah gagal. Tetap periksa kepemilikan jalur: noclobber bukan pengganti pemeriksaan nama unit, direktori, atau tautan simbolik.

(
set -eu
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service' <<'EOF'
[Unit]
Description=Ubuntu course configuration lab

[Service]
Type=oneshot
Environment=LAB_MODE=baseline
ExecStart=/usr/bin/printenv LAB_MODE
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Nilai yang diharapkan pada eksekusi pertama adalah baseline. Cocokkan waktu pesan dengan eksekusi yang baru dilakukan dan periksa systemctl show ubuntu-course-lab.service -p Result -p ExecMainStatus; hasil yang diharapkan adalah Result=success dan ExecMainStatus=0. Rentang jurnal lima menit dapat memuat beberapa eksekusi, sehingga kemunculan kata saja belum membuktikan eksekusi terbaru berhasil. Jika akses jurnal ditolak, gunakan izin baca jurnal yang sesuai, misalnya menjalankan perintah jurnal yang sama melalui sudo.

Contoh memakai Type=oneshot tanpa RemainAfterExit=yes. Sesuai manual layanan systemd, proses yang selesai tidak harus meninggalkan unit aktif. Status inactive setelah berhasil bukan kegagalan. Unit ini tidak memiliki bagian [Install]; latihan memulainya secara manual dan tidak mengatur agar otomatis berjalan saat boot.

Ubah satu nilai melalui satu drop-in

Setelah tahap awal berhasil, buat berkas berikut. Bila pembuatan 10-lab.conf gagal karena sudah ada, berhenti dan periksa berkas tersebut; jangan menghapusnya atau memaksa penimpaan untuk melanjutkan.

(
set -eu
sudo mkdir -p /etc/systemd/system/ubuntu-course-lab.service.d
sudo sh -c 'set -C; cat > /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf' <<'EOF'
[Service]
Environment=LAB_MODE=changed
EOF
sudo systemd-analyze verify /etc/systemd/system/ubuntu-course-lab.service
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Unit asal tetap menyimpan baseline, sementara drop-in menambahkan penetapan LAB_MODE=changed. Aturan Environment= menyatakan bahwa penetapan berikutnya untuk variabel yang sama menggantikan nilai sebelumnya. Periksa lagi systemctl cat ubuntu-course-lab.service dan, setelah daemon-reload, systemctl show ubuntu-course-lab.service -p Environment -p DropInPaths. Harapkan nilai efektif LAB_MODE=changed, lalu cocokkan pesan changed dari eksekusi terbaru dengan hasil sukses. Jika berbeda, periksa semua drop-in yang dimuat sebelum menambahkan perubahan lain.

systemd-analyze verify memeriksa definisi unit dan sejumlah masalah, seperti direktif yang tidak dikenal, dependensi, serta perintah yang tidak tersedia atau tidak dapat dieksekusi. Keberhasilannya tidak membuktikan semua konfigurasi khusus aplikasi, izin akses data, atau respons jaringan sudah benar. Baca juga peringatannya dan periksa perilaku sebenarnya.

Bedakan tiga tindakan memuat ulang

Perintah Fungsi
systemctl daemon-reload Meminta systemd membaca ulang definisi unit dan dependensinya.
systemctl reload NAMA.service Menjalankan tindakan baca ulang konfigurasi yang didukung aplikasi tersebut.
systemctl restart NAMA.service Menghentikan lalu memulai layanan; layanan yang belum berjalan juga dapat dimulai.

Manual systemctl membedakan ketiga operasi ini. daemon-reload tidak mengganti lingkungan proses yang sudah berjalan. Dalam latihan oneshot, proses sebelumnya telah selesai sehingga start berikutnya menjalankan proses baru dengan nilai efektif terbaru. Jangan menyamakan ini dengan start pada layanan biasa yang masih aktif.

Misalnya, periksa konfigurasi aplikasi Nginx dengan nginx -t menggunakan konfigurasi dan hak akses yang sesuai sebelum mempertimbangkan reload yang didukung unit terpasang. Dokumentasi perintah Nginx menjelaskan bahwa pengujian ini memeriksa sintaks serta mencoba membuka berkas yang dirujuk; hasilnya belum membuktikan layanan HTTP merespons benar. Tentukan tindakan berdasarkan dukungan aplikasi, dampak penghentian, dan pengujian koneksi baru. Jangan menjalankan reload atau restart pada layanan produksi hanya untuk meniru tabel.

Pulihkan hanya perubahan latihan ini

Pastikan berkas berikut masih merupakan drop-in yang Anda buat dan belum diubah orang lain. Jika ada perubahan lain, bandingkan dahulu sebelum menghapus. Setelah itu jalankan blok pemulihan:

(
set -eu
sudo rm -- /etc/systemd/system/ubuntu-course-lab.service.d/10-lab.conf
sudo systemctl daemon-reload
sudo systemctl start ubuntu-course-lab.service
journalctl -u ubuntu-course-lab.service --since '5 minutes ago' --no-pager
)

Cocokkan keluaran baseline dari eksekusi terbaru dengan waktu jurnal dan hasil sukses. Periksa kembali nilai efektif serta daftar drop-in. Jika nilai belum kembali, selidiki definisi lain yang ikut dimuat; jangan menghapus seluruh direktori. Perintah rm di atas hanya menghapus satu drop-in latihan. Hindari systemctl revert secara menyeluruh karena perubahan lokal milik administrator lain juga dapat terhapus.

Untuk membersihkan unit latihan, pastikan berkas unit itu dibuat dalam latihan ini, tidak sedang aktif atau memiliki pekerjaan tertunda, dan tidak diperlukan unit lain. Hapus hanya berkas unit tersebut, lalu lakukan daemon-reload. Direktori drop-in yang sudah kosong dapat dibiarkan; jangan menghapus isinya secara rekursif. Pemulihan konfigurasi layanan sebenarnya juga perlu mempertimbangkan cadangan berkas aplikasi, proses yang masih berjalan, serta pemeriksaan respons setelah perubahan diterapkan.