Modifique el archivo de la unidad systemd sin alterar el archivo de la unidad aguas arriba

24

He instalado el pimdservicio por medio de apt. Esto viene con un systemdarchivo de unidad ascendente ( /lib/systemd/system/pimd.service).

Quiero que el servicio se reinicie cuando, por algún motivo, se elimine, por lo tanto, deseo agregar la línea Restart = alwaysen el archivo de la unidad.

Sin embargo, no quiero modificar el archivo de la unidad aguas arriba.

¿Hay alguna solución para esto?

giomanda
fuente

Respuestas:

35

Tienes dos opciones:

  • Copie el archivo de la unidad de /lib/systemd/system/a /etc/systemd/system/.
    Y luego realice sus modificaciones /etc/systemd/system/pimd.servicepara anular por completo los archivos de la unidad proporcionados por el mantenedor del paquete.

    El comando systemctl edit --full <service-name>automatiza esto por ti.

  • Puede alterar o agregar ajustes de configuración específicos para una unidad, sin tener que modificar los archivos de la unidad creando .confarchivos en un directorio desplegable, /etc/systemd/system/<unit-name>.<unit-type>.d/
    es decir, crear un/etc/systemd/system/pimd.service.d/restart.conf

    El comando systemctl edit <service-name>realiza estos pasos por usted.

Ver man systemd.unit

HBruijn
fuente
10
La segunda opción se puede hacer más fácil usandosystemctl edit <service-name>
muru
77
Y el primero usando systemctl edit --full <service-name>.
Grawity
22

La documentación de RHEL recomienda dos formas:

  1. Extienda el archivo de unidad predeterminado creando un directorio de configuración y un archivo en /etc/systemd/system/[name-goes-here].service.d/config_name.conf

En este caso, el archivo debería contener algo como esto:

[Service]
Restart=always

Esto es lo que systemctl edit [name-goes-here]hace, crea ese directorio y override.confdentro de él.

  1. Crear una copia del archivo original de la unidad /usr/lib/systemd/system/en /etc/systemd/system/y hacer cambios allí.

Intentaría con la opción uno, pero ambas son opciones viables. De cualquier manera recuerda corrersystemctl daemon-reload después de hacer los cambios.

Documentación de RHEL sobre Creación y modificación de archivos de unidad systemd

Henrik Pingel reinstala a Monica
fuente
0

Considere usar un script para leer la configuración ascendente, modificarla y escupirla al archivo desplegable.

Por ejemplo, uso Chef y aquí hay una pieza de ruby ​​(biblioteca) que analiza el archivo de unidad de maratón systemd para obtener ExecStart original de él

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

Luego, en la receta, creo el archivo desplegable para agregar una opción 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
riemann
fuente