Par exemple, j'ai un service nommé mysshd.service
sous /usr/lib/systemd/system/
répertoire. Puis-je créer un lien symbolique tel que:
ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service
de sorte que quelle que soit l'opération que je fais avec fool.service se reflète dans mysshd.service
( systemctl enable/disable start/stop fool.servce
)?
Mon but est d'écraser le service sshd natif par un lien symbolique de mon propre service sshd.
Réponses:
Pour autant que je sache, systemd ne traitera pas cela particulièrement bien. Si je comprends bien, vous voulez remplacer le comportement de
sshd.service
, non?Heureusement pour vous, systemd est conçu pour ce genre de chose. Mettez simplement votre définition de service dans
/etc/systemd/system/ssh.service
, exécutezsystemctl daemon-reload
pour recharger les fichiers d'unité, et systemd utilisera automatiquement cette configuration au lieu du systèmessh.service
.Vous voulez aussi du
systemctl enable mysshd.service
travail? Aucun problème. Dans la[Install]
section de votre fichier d'unité, ajoutez une ligne qui ditAlias=mysshd.service
. Ensuite, exécutezsystemctl reenable ssh.service
pour que systemd corrige les liens symboliques de l'unité, et vous êtes en or.Maintenant, vous n'avez pas donné de détails sur ce qui
mysshd.service
est censé faire. Si c'est complètement différent de la normalessh.service
, tant mieux! Utilisez la méthode ci-dessus. Cependant, si vous voulez juste changer une petite chose, vous utilisez la mauvaise approche. systemd vous permet de créer des "extraits" de fichiers d'unité qui seront appliqués au-dessus des fichiers d'unité normaux. Cela vous permet d'ajouter ou de remplacer des directives individuelles tout en permettant au reste du fichier d'unité de recevoir des mises à jour du gestionnaire de packages. Pour ce faire, créez simplement/etc/systemd/system/ssh.d/my-custom-config.conf
(vous pouvez changermy-custom-config.conf
pour être ce que vous voulez, et vous pouvez également avoir plusieurs fichiers de remplacement). Dans ce fichier, placez les directives que vous souhaitez modifier ou ajouter à l'habituelssh.service
. Vous pouvez même ajouter desAlias=
directives, donc çasystemctl start mysshd.service
marche! N'oubliez pas d'exécutersystemctl daemon-reload
une fois que vous avez terminé (et, si vous l'avez utiliséAlias=
,systemctl reenable ssh.service
).En passant, ne changez jamais , jamais, les fichiers d'unité systemd
/usr/lib/systemd
. Déjà! La norme de hiérarchie du système de fichiers requiert qu'elle/usr
soit traitée en lecture seule. En pratique, cela signifie que le gestionnaire de packages gère/usr
(à l'exception de/usr/local
), et vous ne touchez pas à ce que le gestionnaire de packages gère - en particulier parce que tout ce que vous modifiez sera probablement remplacé par la suite. Au lieu de cela, mettez vos affaires quelque part comme/etc
.la source
foo.service
, exécutezsudo systemctl edit foo.service
, et cela enregistrera tout ce que vous avez tapé/etc/systemd/system/foo.service.d/override.conf
.Alias=
directive ne fonctionne PAS dans les fichiers de substitution. Voir github.com/systemd/systemd/issues/1090systemctl edit
au moment où j'ai écrit cette réponse. n'hésitez pas à modifier ma réponse pour refléter leAlias=
bug (mettez "OK avec répondeur" ou quelque chose dans le message d'édition). bonne prise.Utiliser
link
avec le chemin complet:Notez que vous ne pouvez pas lier un fichier de service qui est déjà en lui-même un lien.
la source
Les liens symboliques n'étaient pas possibles auparavant . Mais ils le sont aujourd'hui.
la source