Zmodyfikuj plik jednostki systemowej bez zmiany pliku jednostki nadrzędnej

24

Zainstalowałem pimdusługę za pomocą apt. Jest to dostarczane z systemdplikiem jednostki nadrzędnej ( /lib/systemd/system/pimd.service).

Chcę, aby usługa została ponownie uruchomiona, gdy z jakiegoś powodu zostanie zabita, dlatego chcę dodać linię Restart = alwaysdo pliku jednostkowego.

Nie chcę jednak modyfikować pliku jednostki nadrzędnej.

Czy istnieje jakieś obejście tego problemu?

giomanda
źródło
Ściśle powiązane: jak ustawić zmienną środowiskową w usłudze systemd?
Michael Hampton
Co próbowałeś?
030

Odpowiedzi:

35

Masz dwie opcje:

  • Skopiuj plik jednostki z /lib/systemd/system/do /etc/systemd/system/.
    Następnie dokonaj modyfikacji, /etc/systemd/system/pimd.serviceaby całkowicie zastąpić pliki plików dostarczone przez opiekuna pakietu.

    Polecenie systemctl edit --full <service-name>automatyzuje to za Ciebie.

  • Możesz zmieniać lub dodawać określone ustawienia konfiguracji dla jednostki, bez konieczności modyfikowania plików jednostki, tworząc .confpliki w katalogu rozwijanym, /etc/systemd/system/<unit-name>.<unit-type>.d/
    tj. Tworząc/etc/systemd/system/pimd.service.d/restart.conf

    Polecenie systemctl edit <service-name>wykonuje te kroki za Ciebie.

Widzieć man systemd.unit

HBruijn
źródło
10
Drugą opcję można ułatwić, używającsystemctl edit <service-name>
muru
7
I pierwszy przy użyciu systemctl edit --full <service-name>.
grawity
22

Dokumentacja RHEL zaleca dwa sposoby:

  1. Rozszerz domyślny plik jednostki, tworząc katalog konfiguracji i plik w /etc/systemd/system/[name-goes-here].service.d/config_name.conf

W takim przypadku plik musiałby zawierać coś takiego:

[Service]
Restart=always

To właśnie systemctl edit [name-goes-here]robi, tworzy ten katalog i override.confwewnątrz niego.

  1. Utworzyć kopię oryginalnego pliku jednostki /usr/lib/systemd/system/w /etc/systemd/system/i wprowadzić zmiany tam.

Wypróbowałbym opcję pierwszą, ale oba są wykonalne. Tak czy inaczej pamiętaj, aby uruchomić systemctl daemon-reloadpo wprowadzeniu zmian.

Dokumentacja RHEL dotycząca tworzenia i modyfikowania systemowych plików jednostek

Henrik Pingel Przywróć Monikę
źródło
0

Rozważ użycie skryptu do odczytania konfiguracji nadrzędnej, zmodyfikowania jej i wyplucia do pliku rozwijanego.

Na przykład używam Chef i oto kawałek rubinu (biblioteki), który analizuje plik jednostki systemowej maratonu, aby uzyskać z niego oryginalny plik ExecStart

require 'inifile'

module Dcos
  def get_execstart_from_unit_file
    marathon_systemd_unit_file = 
IniFile.load('/etc/systemd/system/dcos-marathon.service')
    return marathon_systemd_unit_file['Service']['ExecStart']
  end
end

Następnie w przepisie tworzę plik rozwijany, aby dołączyć opcję do ExecStart

chef_gem 'inifile'

exec_start_orig = get_execstart_from_unit_file

systemd_service_drop_in 'dcos-marathon' do
  override 'dcos-marathon.service'
  precursor 'Service' => { 'ExecStart' => nil }
  service do
    exec_start exec_start_orig + ' --env_vars_prefix "DCOS_MARATHON_"'
  end
end
riemann
źródło