Sistem hizmetlerini nasıl geçersiz kılar veya yapılandırabilirim?

69

Birçok sysv init betiği, yöneticinin onu yapılandırmasına izin vermek için /etc/default dosyasında karşılık gelen bir dosya kullandı. Upstart işleri .override dosyaları kullanılarak değiştirilebilir. Systemd birimlerini nasıl geçersiz kılar veya yapılandırabilirim, şimdi Uduntu'da sistemd varsayılan mıdır?

    
sordu muru 09.08.2015 05:31

1 cevap

118

systemd birimlerinin /etc/default dosyasındaki dosyalara uyması gerekmez. systemd kolayca yapılandırılabilir, ancak sistemd birim dosyalarının sözdizimini bilmenizi gerektirir.

Paketler, birim birimi dosyalarını genellikle /lib/systemd/system/ dizinindedir. Bunlar düzenlenecek değil . Bunun yerine, systemd , /etc/systemd/system/ dosyasında uygun dosyalar oluşturarak bu dosyaları geçersiz kılmanıza izin verir.

Belirli bir hizmet için foo , paket /lib/systemd/system/foo.service sağlayacaktır. % Co_de% kullanarak durumunu kontrol edebilir veya günlüklerini systemctl status foo kullanarak görüntüleyebilirsiniz. % Co_de% tanımındaki bir şeyi geçersiz kılmak için şunu yapın:

sudo systemctl edit foo

Bu, birimden sonra adlandırılmış journalctl -u foo dizin ve bu dizinde foo dosyası ( /etc/systemd/system ) oluşturur. Bu dosyayı kullanarak ayarları ekleyebilir veya geçersiz kılabilirsiniz (veya override.conf dosyasındaki diğer /etc/systemd/system/foo.service.d/override.conf dosyaları).

Komut argümanlarını geçersiz kılma

Örneğin .conf hizmetini alın. Kullanıcıma TTY2 autologin istediğimi varsayalım (bu tavsiye edilmez, ancak sadece bir örnek). TTY2, /etc/systemd/system/foo.service.d/ hizmeti tarafından çalıştırılır ( getty , [email protected] şablonunun bir örneği). Bunu yapmak için tty2 hizmetini değiştirmem gerekiyor.

$ systemctl cat [email protected]
# /lib/systemd/system/[email protected]
#  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 [email protected], 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 şu andaki /lib/systemd/system/[email protected] satırını değiştirmem gerekiyor:

$ systemctl cat [email protected] | grep Exec     
ExecStart=-/sbin/agetty --noclear %I $TERM

Bunu geçersiz kılmak için şunu yapın:

sudo systemctl edit [email protected]

Ve ekle:

[Service]
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM

Not:

  1. [email protected] 'yi yeniden ayarlamadan önce, ExecStart , ExecStart (bir değişken olarak değil) ve After ' ye benzer bir ek ayar olduğu için, açıkça Environment 'sini temizlemem gerekiyordu. EnvironmentFile veya RestartSec gibi ayarları geçersiz kılar. Type , yalnızca ExecStart hizmetleri için birden çok girişe sahip olabilir.
  2. Doğru bölüm üstbilgisini kullanmalıydım. Orijinal dosyada, Type=oneshot , ExecStart bölümünde, bu yüzden benim geçersiz kılma [Service] 'sini ExecStart bölümüne koymalıdır. Sıklıkla, [Service] kullanarak gerçek hizmet dosyasına göz atmak, neyi geçersiz kılmanız gerektiğini ve hangi bölümde bulunduğunu size söyleyecektir.

Genellikle, bir systemd birim dosyasını düzenlerseniz, bunun etkili olması için şunları çalıştırmanız gerekir:

sudo systemctl daemon-reload

Ancak, systemctl cat bunu sizin için otomatik olarak yapıyor.

Şimdi:

$ systemctl cat [email protected] | grep Exec
ExecStart=-/sbin/agetty --noclear %I $TERM
ExecStart=
ExecStart=-/sbin/agetty -a muru --noclear %I $TERM

$ systemctl show [email protected] | grep ExecS
ExecStart={ path=/sbin/agetty ; argv[]=/sbin/agetty -a muru --noclear %I $TERM ; ... }

Ve eğer yaparsam:

sudo systemctl restart [email protected]

tuşuna basın ve Ctrl Alt F2 , presto! Hesabıma TTY'de giriş yapacağım.

Daha önce söylediğim gibi, systemctl edit bir şablon örneğidir. Peki, o şablonun tüm örneklerini geçersiz kılmak istesem ne olur? Bu, şablonun kendisini düzenleyerek yapılabilir (örnek tanımlayıcının kaldırılması - bu durumda [email protected] ):

systemctl edit [email protected]

Ortamı geçersiz kılma

tty2 dosyalarının yaygın kullanımı, ortam değişkenlerini ayarlıyor. Genellikle, /etc/default bir kabuk betiğidir, bu yüzden kabuk dil yapılarını kullanabilirsiniz. Bununla birlikte, /etc/default ile, bu durum böyle değil. Ortam değişkenlerini iki şekilde belirtebilirsiniz:

Bir dosya aracılığıyla

Ortam değişkenlerini bir dosyaya ayarladığınızı varsayalım:

$ cat /path/to/some/file
FOO=bar

Ardından, geçersiz kılmayı ekleyebilirsiniz:

[Service]
EnvironmentFile=/path/to/some/file

Özellikle, systemd öğeniz yalnızca atama içeriyorsa ve kabuk sözdizimi içermiyorsa, /etc/default/grub olarak kullanabilirsiniz.

EnvironmentFile girdisi

ile

Yukarıdakiler ayrıca aşağıdaki geçersiz kılma kullanılarak gerçekleştirilebilir:

[Service]
Environment=FOO=bar

Ancak, bu durum birden çok değişkenle, boşluklarla vb. anlaşılabilir. Diğer yanıtlarımdan birine göz atın. böyle bir örnek için.

İleri Okuma

Bu mekanizma aracılığıyla, Environment birimlerinin geçersiz kılınması ve bu gibi değişikliklerin geri alınmasının (geçersiz kılma dosyasının kaldırılması) çok kolay hale gelir. Bunlar değiştirilebilen tek ayar değildir.

Aşağıdaki bağlantılar yararlı olacaktır:

verilen cevap muru 09.08.2015 05:31

Etiketlerdeki diğer soruları oku