J'ai installé le service pimd
au moyen de apt
. Cela vient avec un fichier d'unité systemd
en amont (/lib/systemd/system/pimd.service
).
Je souhaite que le service soit redémarré lorsque, pour une raison quelconque, il est tué, je souhaite donc ajouter la ligne Restart = always
dans le fichier d'unité.
Cependant, je ne souhaite pas modifier le fichier d'unité en amont.
Y a-t-il une solution à cela?
Vous avez deux options:
Copiez le fichier d'unité de /lib/systemd/system/
à /etc/systemd/system/
.
Et ensuite faites vos modifications dans /etc/systemd/system/pimd.service
pour 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 .conf
fichiers 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>
effectue ces étapes pour vous.
Voir man systemd.unit
La documentation RHEL recommande deux méthodes:
/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 quoi systemctl edit [name-goes-here]
le fait, il crée ce répertoire et override.conf
à l'intérieur.
Créez une copie du fichier d'unité d'origine
/usr/lib/systemd/system/
dans/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 modifications.
Documentation RHEL sur la création et la modification de fichiers d'unité systemd
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 Ruby (bibliothèque) qui analyse le fichier d'unité systemd de marathon pour obtenir ExecStart original à partir de celui-ci
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