Modifier le fichier d'unité systemd sans altérer le fichier d'unité en amont

24

J'ai installé le pimdservice au moyen de apt. Cela vient avec un systemdfichier d'unité en amont ( /lib/systemd/system/pimd.service).

Je veux que le service soit redémarré quand pour une raison quelconque il est tué, je souhaite donc ajouter la ligne Restart = alwaysdans le fichier d'unité.

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

Y a-t-il une solution à cela?

giomanda
la source

Réponses:

35

Vous avez deux options:

  • Copiez le fichier d'unité de /lib/systemd/system/à /etc/systemd/system/.
    Ensuite, apportez vos modifications /etc/systemd/system/pimd.servicepour remplacer complètement le ou les fichiers d'unité fournis par le responsable du package.

    La commande systemctl edit --full <service-name>automatise cela pour vous.

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

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

Voir man systemd.unit

HBruijn
la source
10
La deuxième option peut être facilitée en utilisantsystemctl edit <service-name>
muru
7
Et le premier en utilisant systemctl edit --full <service-name>.
grawity
22

La documentation RHEL recommande deux méthodes:

  1. Étendez le fichier d'unité par défaut en créant un répertoire de configuration et un fichier sous /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 qui systemctl edit [name-goes-here]fait, il crée ce répertoire et override.confen son sein.

  1. Créez une copie du fichier de l' unité d' origine /usr/lib/systemd/system/dans /etc/systemd/system/et effectuer vos modifications.

J'essaierais la première option, mais ce sont deux options viables. Dans tous les cas, pensez à exécuter systemctl daemon-reloadaprès avoir effectué les modifications.

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

Henrik Pingel réintègre Monica
la source
0

Pensez à utiliser un script pour lire la configuration en amont, la modifier et la recracher dans un fichier de dépôt.

Par exemple, j'utilise Chef et voici un morceau de rubis (bibliothèque) qui analyse le fichier d'unité systemd marathon pour en obtenir 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
riemann
la source