90 votes

Modifier le fichier d'unité systemd sans modifier le fichier d'unité amont

J'ai installé le pimd service par le biais de apt . Cela s'accompagne d'une systemd le fichier de l'unité ( /lib/systemd/system/pimd.service ).

Je veux que le service soit redémarré lorsque, pour une raison quelconque, il est tué, c'est pourquoi je souhaite ajouter la ligne suivante Restart = always dans le fichier de l'unité.

Cependant, je ne veux pas modifier le fichier d'unité en amont.

Existe-t-il une solution de contournement pour cela ?

137voto

snowdude Points 2790

Vous avez deux options :

  • Copiez le fichier de l'unité à partir de /lib/systemd/system/ a /etc/systemd/system/ .
    Et ensuite, faites vos modifications dans /etc/systemd/system/pimd.service pour remplacer complètement le ou les fichiers unitaires fournis par le responsable du paquet.

    La commande systemctl edit --full <service-name> automatise cette opération pour vous.

  • Vous pouvez modifier ou ajouter des paramètres de configuration spécifiques à une unité, sans avoir à modifier les fichiers de l'unité, en créant des fichiers de configuration. .conf dans un répertoire de dépôt /etc/systemd/system/<unit-name>.<unit-type>.d/
    c'est-à-dire créer un /etc/systemd/system/pimd.service.d/restart.conf

    La commande systemctl edit <service-name> exécute ces étapes pour vous.

Véase man systemd.unit

30voto

Henrik Pingel Points 8426

La documentation de RHEL recommande deux méthodes :

  1. Étendez le fichier d'unité par défaut en créant un répertoire et un fichier de configuration sous le nom de /etc/systemd/system/[name-goes-here].service.d/config_name.conf

Dans ce cas, le fichier devrait contenir quelque chose comme ceci :

[Service]
Restart=always

C'est ce que systemctl edit [name-goes-here] crée ce répertoire et override.conf en son sein.

  1. Créer une copie du fichier de l'unité originale /usr/lib/systemd/system/ en /etc/systemd/system/ et y apporter des modifications.

J'essaierais la première option, mais ce sont deux options viables. Dans tous les cas, n'oubliez pas d'exécuter systemctl daemon-reload après avoir effectué les changements.

Documentation RHEL sur la création et la modification des fichiers d'unité systemd

3voto

riemann Points 43

Envisagez l'utilisation d'un script pour lire la configuration amont, la modifier, et la recracher dans un fichier de dépôt.

Par exemple, j'utilise Chef et voici un morceau de ruby (bibliothèque) qui analyse le fichier marathon systemd unit pour en tirer le ExecStart original

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

Puis dans la recette, je crée le fichier drop-in pour ajouter une option à 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

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X