systemd
birimlerin dosyalara uyması gerekmez /etc/default
. systemd
kolayca yapılandırılabilir, ancak systemd birim dosyalarının sözdizimini bilmenizi gerektirir.
Paketler birim dosyalarını genellikle içinde gönderir /lib/systemd/system/
. Bunlar değil düzenlenebilir için. Bunun yerine, systemd
içinde uygun dosyalar oluşturarak bu dosyaları geçersiz kılmanıza olanak sağlar /etc/systemd/system/
.
Belirli bir hizmet foo
için paket sağlayacaktır /lib/systemd/system/foo.service
. Kullanarak durumunu kontrol edebilir systemctl status foo
veya kullanarak kayıtlarını görüntüleyebilirsiniz journalctl -u foo
. Tanımındaki bir şeyi geçersiz kılmak foo
için:
sudo systemctl edit foo
Bu /etc/systemd/system
, birimin adında bir dizin ve override.conf
bu dizinde ( /etc/systemd/system/foo.service.d/override.conf
) bir dosya oluşturur . Bu dosyayı (veya içindeki diğer .conf
dosyaları /etc/systemd/system/foo.service.d/
) kullanarak ayarları ekleyebilir veya geçersiz kılabilirsiniz .
Komut argümanlarını geçersiz kılma
Mesela getty
servisi ele alalım. Diyelim ki kullanıcıma TTY2 otolog yaptırmak istiyorum (bu tavsiye edilmez, sadece bir örnek). TTY2 getty@tty2
servis tarafından çalıştırılır ( tty2
şablonun bir örneği /lib/systemd/system/getty@service
). Bunu yapmak için getty@tty2
servisi değiştirmem gerekiyor .
$ systemctl cat getty@tty2
# /lib/systemd/system/getty@.service
# This file is part of systemd.
#
# systemd is free software; you can redistribute it and/or modify it
# under the terms of the GNU Lesser General Public License as published by
# the Free Software Foundation; either version 2.1 of the License, or
# (at your option) any later version.
[Unit]
Description=Getty on %I
Documentation=man:agetty(8) man:systemd-getty-generator(8)
Documentation=http://0pointer.de/blog/projects/serial-console.html
After=systemd-user-sessions.service plymouth-quit-wait.service
After=rc-local.service
# If additional gettys are spawned during boot then we should make
# sure that this is synchronized before getty.target, even though
# getty.target didn't actually pull it in.
Before=getty.target
IgnoreOnIsolate=yes
# On systems without virtual consoles, don't start any getty. Note
# that serial gettys are covered by serial-getty@.service, not this
# unit.
ConditionPathExists=/dev/tty0
[Service]
# the VT is cleared by TTYVTDisallocate
ExecStart=-/sbin/agetty --noclear %I $TERM
Type=idle
Restart=always
RestartSec=0
UtmpIdentifier=%I
TTYPath=/dev/%I
TTYReset=yes
TTYVHangup=yes
TTYVTDisallocate=yes
KillMode=process
IgnoreSIGPIPE=no
SendSIGHUP=yes
# Unset locale for the console getty since the console has problems
# displaying some internationalized messages.
Environment=LANG= LANGUAGE= LC_CTYPE= LC_NUMERIC= LC_TIME= LC_COLLATE= LC_MONETARY= LC_MESSAGES= LC_PAPER= LC_NAME= LC_ADDRESS= LC_TELEPHONE= LC_MEASUREMENT= LC_IDENTIFICATION=
[Install]
WantedBy=getty.target
DefaultInstance=tty1
Özellikle ExecStart
şu anda olan çizgiyi değiştirmem gerekiyor :
$ systemctl cat getty@tty2 | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
Bunu geçersiz kılmak için:
sudo systemctl edit getty@tty2
Ve Ekle:
[Service]
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM
Bunu not et:
- Ben açıkça anlaşılır zorunda
ExecStart
o benzer bir katkı ayardır olarak, yeniden ayarlamadan önce After
, Environment
(bir bütün olarak değil başına değişken) ve EnvironmentFile
benzeri ayarlarını geçersiz için ve karşı RestartSec
veya Type
. ExecStart
yalnızca Type=oneshot
servisler için birden fazla giriş olabilir .
- Uygun bölüm başlığını kullanmak zorunda kaldım. Orijinal dosyada,
ExecStart
bu [Service]
bölümde var, bu yüzden geçersiz kılmam ExecStart
bu [Service]
bölümü de koymak zorunda . Genelde, kullanılan servis dosyasına bir göz atmak, systemctl cat
neleri geçersiz kılmanız gerektiğini ve hangi bölümde olduğunu size söyler.
Genellikle, bir sistem birimi dosyasını düzenlerseniz, geçerli olması için çalıştırmanız gerekir:
sudo systemctl daemon-reload
Ancak systemctl edit
bunu otomatik olarak sizin için yapar.
Şimdi:
$ systemctl cat getty@tty2 | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM
$ systemctl show getty@tty2 | grep ExecS
ExecStart={ path=/sbin/agetty ; argv[]=/sbin/agetty -a muru --noclear %I $TERM ; ... }
Ve eğer yaparsam:
sudo systemctl restart getty@tty2
ve basın CtrlAltF2, presto! O TTY hesabıma giriş yapacağım.
Daha önce de söylediğim getty@tty2
gibi, bir şablon örneğidir. Peki, bu şablonun tüm örneklerini geçersiz kılmak istersem? Bu, şablonun kendisini düzenleyerek yapılabilir (örnek tanımlayıcısını kaldırma - bu durumda tty2
):
systemctl edit getty@
Çevre geçersiz kılma
Sık kullanılan bir /etc/default
dosya kullanımı ortam değişkenleridir. Genellikle, /etc/default
bir kabuk betiğidir, bu nedenle içinde kabuk dili yapıları kullanabilirsiniz. Bununla systemd
birlikte, durum böyle değil. Ortam değişkenlerini iki yolla belirleyebilirsiniz:
Bir dosya aracılığıyla
Ortam değişkenlerini bir dosyada belirlediğinizi varsayalım:
$ cat /path/to/some/file
FOO=bar
Ardından, geçersiz kılmaya ekleyebilirsiniz:
[Service]
EnvironmentFile=/path/to/some/file
Özellikle, /etc/default/grub
yalnızca ödevler içeriyorsa ve kabuk sözdizimi yoksa, olarak kullanabilirsiniz EnvironmentFile
.
Via Environment
girdileri
Yukarıdakiler aşağıdaki geçersiz kılma kullanılarak da gerçekleştirilebilir:
[Service]
Environment=FOO=bar
Ancak, bu çoklu vb değişkenler, boşluklar göz at ile zor alabilirsiniz benim diğer cevaplar biri Böyle bir durumda bir örnek için.
Daha fazla okuma
Bu mekanizma sayesinde, systemd
birimlerin geçersiz kılınmasının yanı sıra bu değişiklikleri geri almanın (geçersiz kılma dosyasını kaldırarak) çok kolay hale gelir . Bunlar sadece değiştirilebilecek ayarlar değil.
Aşağıdaki linkler faydalı olacaktır:
ExecStart=
Boş bir girişi temizlerken, şu şekilde yorum yapamayacağınızı unutmayın:ExecStart= # Empty line to clear previous entries.
Bu, başka birExecStart=
giriş olarak alınacak ve listeye eklenecektir. PS. İtibarım yüzünden muru cevabına yorum ekleyemedim.