Modifica il file di unità di sistema senza alterare il file di unità a monte


24

Ho installato il pimdservizio tramite apt. Questo viene fornito con un systemdfile di unità upstream ( /lib/systemd/system/pimd.service).

Voglio che il servizio venga riavviato quando per qualche motivo viene ucciso, quindi desidero aggiungere la riga Restart = alwaysnel file dell'unità.

Tuttavia, non voglio modificare il file di unità upstream.

C'è qualche soluzione alternativa per questo?



Cosa hai provato
030,

Risposte:


35

Hai due opzioni:

  • Copia il file dell'unità da /lib/systemd/system/a /etc/systemd/system/.
    E quindi apportare le modifiche /etc/systemd/system/pimd.serviceper sostituire completamente i file di unità forniti dal manutentore del pacchetto.

    Il comando lo systemctl edit --full <service-name>automatizza per te.

  • È possibile modificare o aggiungere impostazioni di configurazione specifiche per un'unità, senza dover modificare i file di unità creando .conffile in una directory a discesa, /etc/systemd/system/<unit-name>.<unit-type>.d/
    ovvero creare un/etc/systemd/system/pimd.service.d/restart.conf

    Il comando systemctl edit <service-name>esegue questi passaggi per te.

Vedere man systemd.unit


10
La seconda opzione può essere semplificata usandosystemctl edit <service-name>
muru

7
E il primo usando systemctl edit --full <service-name>.
Grawity

22

La documentazione RHEL raccomanda due modi:

  1. Estendi il file di unità predefinito creando una directory di configurazione e un file in /etc/systemd/system/[name-goes-here].service.d/config_name.conf

In questo caso il file dovrebbe contenere qualcosa del genere:

[Service]
Restart=always

Questo è ciò che systemctl edit [name-goes-here]fa, crea quella directory e al override.confsuo interno.

  1. Creare una copia del file originale unità /usr/lib/systemd/system/in /etc/systemd/system/e apportare le modifiche lì.

Vorrei provare l'opzione 1 ma sono entrambe opzioni praticabili. In ogni caso, ricorda di eseguire systemctl daemon-reloaddopo aver apportato le modifiche.

Documentazione RHEL sulla creazione e modifica dei file di unità di sistema


0

Prendi in considerazione l'utilizzo di uno script per leggere la configurazione upstream, modificarla e sputarla nel file drop-in.

Ad esempio, utilizzo Chef ed ecco un pezzo di ruby ​​(libreria) che analizza il file di unità systemd della maratona per ottenere ExecStart originale da esso

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

Quindi nella ricetta, creo il file drop-in per aggiungere un'opzione a 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
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.