Banyak skrip init sysv menggunakan file yang sesuai /etc/default
untuk memungkinkan administrator untuk mengkonfigurasinya. Pekerjaan pemula dapat dimodifikasi menggunakan .override
file. Bagaimana cara menimpa atau mengkonfigurasi unit systemd, sekarang systemd adalah default di Ubuntu?
109
ExecStart=
entri kosong Anda tidak dapat memberikan komentar setelahnya seperti:ExecStart= # Empty line to clear previous entries.
Ini akan diambil sebagaiExecStart=
entri lain dan ditambahkan ke daftar. PS. Saya tidak bisa menambahkan komentar pada jawaban muru karena reputasi saya yang rendah.Jawaban:
systemd
unit tidak perlu mematuhi file di/etc/default
.systemd
mudah dikonfigurasi, tetapi mengharuskan Anda tahu sintaks file unit systemd.Paket mengirimkan file unit biasanya di
/lib/systemd/system/
. Ini tidak boleh diedit. Sebagai gantinya,systemd
Anda dapat mengganti file-file ini dengan membuat file yang sesuai di/etc/systemd/system/
.Untuk layanan yang diberikan
foo
, paket akan menyediakan/lib/systemd/system/foo.service
. Anda dapat memeriksa statusnya menggunakansystemctl status foo
, atau melihat log menggunakanjournalctl -u foo
. Untuk mengganti sesuatu dalam definisifoo
, lakukan:Ini membuat direktori dengan
/etc/systemd/system
nama setelah unit, danoverride.conf
file dalam direktori itu (/etc/systemd/system/foo.service.d/override.conf
). Anda dapat menambah atau mengabaikan pengaturan menggunakan file ini (atau.conf
file lain di/etc/systemd/system/foo.service.d/
).Mengganti argumen perintah
Ambil
getty
layanan misalnya. Katakanlah saya ingin memiliki TTY2 autologin kepada pengguna saya (ini tidak disarankan, tetapi hanya sebuah contoh). TTY2 dijalankan olehgetty@tty2
layanan (tty2
menjadi contoh dari templat/lib/systemd/system/getty@service
). Untuk melakukan ini, saya harus memodifikasigetty@tty2
layanan.Secara khusus, saya harus mengubah
ExecStart
jalur, yang saat ini adalah:Untuk mengesampingkan ini, lakukan:
Dan tambahkan:
Perhatikan bahwa:
ExecStart
sebelum mengaturnya lagi, karena ini merupakan pengaturan tambahan, mirip denganAfter
,Environment
(secara keseluruhan, bukan per-variabel) danEnvironmentFile
, dan menentang pengaturan utama sepertiRestartSec
atauType
.ExecStart
dapat memiliki beberapa entri hanya untukType=oneshot
layanan.ExecStart
ada di[Service]
bagian, jadi penggantian saya harus dimasukkanExecStart
ke[Service]
bagian juga. Seringkali, melihat file layanan yang sebenarnya menggunakansystemctl cat
akan memberi tahu Anda apa yang perlu Anda timpa dan di bagian mana.Biasanya, jika Anda mengedit file unit systemd, agar bisa berlaku, Anda perlu menjalankan:
Namun,
systemctl edit
secara otomatis melakukan ini untuk Anda.Sekarang:
Dan jika saya melakukannya:
dan tekan CtrlAltF2, presto! Saya akan masuk ke akun saya di TTY itu.
Seperti yang saya katakan sebelumnya,
getty@tty2
adalah contoh dari sebuah template. Jadi, bagaimana jika saya ingin mengganti semua contoh template itu? Itu dapat dilakukan dengan mengedit templat itu sendiri (menghapus pengidentifikasi contoh - dalam kasus initty2
):Mengesampingkan lingkungan
Kasus penggunaan umum
/etc/default
file adalah pengaturan variabel lingkungan. Biasanya,/etc/default
ini adalah skrip shell, jadi Anda bisa menggunakan konstruksi bahasa shell di dalamnya. Dengansystemd
, bagaimanapun, ini tidak terjadi. Anda dapat menentukan variabel lingkungan dengan dua cara:Melalui file
Katakanlah Anda telah menetapkan variabel lingkungan dalam file:
Kemudian, Anda dapat menambahkan ke override:
Secara khusus, jika Anda
/etc/default/grub
hanya berisi tugas dan tidak ada sintaks shell, Anda dapat menggunakannya sebagaiEnvironmentFile
.Melalui
Environment
entriHal di atas juga dapat dilakukan dengan menggunakan penggantian berikut:
Namun, ini bisa menjadi rumit dengan beberapa variabel, spasi, dll. Lihatlah salah satu jawaban saya yang lain untuk contoh dari contoh seperti itu.
Bacaan lebih lanjut
Melalui mekanisme ini, menjadi sangat mudah untuk menimpa
systemd
unit, serta membatalkan perubahan tersebut (hanya dengan menghapus file override). Ini bukan satu-satunya pengaturan yang dapat dimodifikasi.Tautan berikut akan bermanfaat:
systemd
systemd
manual , khususnya, halaman manual darisystemd.unit
dansystemd.service
sumber
systemd.service(5)
manual, bagian padaExecStart
: "Kecuali Type = oneshot, tepat satu perintah harus diberikan. Ketika Type = oneshot digunakan, nol atau lebih perintah dapat ditentukan. Perintah dapat ditentukan dengan menyediakan beberapa baris perintah di sama arahan, atau alternatifnya, arahan ini dapat ditentukan lebih dari sekali dengan efek yang sama. Jika string kosong ditetapkan untuk opsi ini, daftar perintah untuk memulai diatur ulang, penugasan sebelumnya dari opsi ini tidak akan berpengaruh. "sudo rm
menimpa file lalusystemctl daemon-reload
, atau Anda dapatsystemctl edit
dan mengganti semua yang di override dengan komentar. Komentar dalam file layanan dimulai dengan#
.systemctl revert foo