De nombreux scripts sysv init utilisaient un fichier correspondant /etc/default
pour permettre à l'administrateur de le configurer. Les travaux Upstart peuvent être modifiés à l'aide de .override
fichiers. Comment remplacer ou configurer des unités systemd, maintenant que systemd est la valeur par défaut dans Ubuntu?
110
ExecStart=
avec une entrée vide, vous ne pouvez pas ajouter de commentaire après:ExecStart= # Empty line to clear previous entries.
Cela sera considéré comme une autreExecStart=
entrée et sera ajouté à la liste. PS Je ne pouvais pas ajouter de commentaire à la réponse de Muru à cause de ma mauvaise réputation.Réponses:
systemd
les unités ne doivent pas obéir aux fichiers en/etc/default
.systemd
est facilement configurable, mais nécessite que vous connaissiez la syntaxe des fichiers unité systemd.Les colis expédient généralement des fichiers d'unité au format
/lib/systemd/system/
. Ceux-ci ne doivent pas être édités. À la place,systemd
vous permet de remplacer ces fichiers en créant les fichiers appropriés dans/etc/systemd/system/
.Pour un service donné
foo
, le paquet fournirait/lib/systemd/system/foo.service
. Vous pouvez vérifier son statut à l'aide desystemctl status foo
ou afficher ses journaux à l'aide dejournalctl -u foo
. Pour remplacer quelque chose dans la définition defoo
, faites:Cela crée un répertoire
/etc/systemd/system
nommé d'après l'unité et unoverride.conf
fichier dans ce répertoire (/etc/systemd/system/foo.service.d/override.conf
). Vous pouvez ajouter ou remplacer des paramètres à l'aide de ce fichier (ou d'autres.conf
fichiers contenus dans/etc/systemd/system/foo.service.d/
).Remplacement des arguments de commande
Prenez le
getty
service par exemple. Dites que je veux avoir TTY2 connexion automatique à mon utilisateur (ce n'est pas conseillé, mais juste un exemple). TTY2 est exécuté par legetty@tty2
service (tty2
en tant qu'instance du modèle/lib/systemd/system/getty@service
). Pour ce faire, je dois modifier legetty@tty2
service.En particulier, je dois changer la
ExecStart
ligne, qui est actuellement:Pour annuler cela, faites:
Et ajouter:
Notez que:
ExecStart
avant de nouveau, car il est un paramètre additif, semblable àAfter
,Environment
(dans son ensemble, et non par variable) etEnvironmentFile
, et opposés aux paramètres comme remplaçantRestartSec
ouType
.ExecStart
peut avoir plusieurs entrées que pour lesType=oneshot
services.ExecStart
trouve dans la[Service]
section, mon remplacement doit donc également figurerExecStart
dans la[Service]
section. Souvent, consulter le fichier de service réelsystemctl cat
vous indiquera ce que vous devez remplacer et dans quelle section il se trouve.Habituellement, si vous éditez un fichier unité systemd pour que celui-ci prenne effet, vous devez exécuter:
Cependant,
systemctl edit
cela le fait automatiquement pour vous.Maintenant:
Et si je le fais:
et appuyez sur CtrlAltF2, hop! Je serai connecté à mon compte sur ce téléscripteur.
Comme je l'ai dit précédemment,
getty@tty2
est une instance d'un modèle. Alors, si je voulais remplacer toutes les instances de ce modèle? Cela peut être fait en modifiant le modèle lui-même (en supprimant l'identifiant d'instance - dans ce castty2
):Dépasser l'environnement
Un cas d'utilisation courant de
/etc/default
fichiers est la définition de variables d'environnement. Habituellement,/etc/default
c'est un script shell, vous pouvez donc utiliser des constructions de langage shell. Avecsystemd
, cependant, ce n'est pas le cas. Vous pouvez spécifier des variables d'environnement de deux manières:Via un fichier
Supposons que vous ayez défini les variables d'environnement dans un fichier:
Ensuite, vous pouvez ajouter à la substitution:
En particulier, si votre
/etc/default/grub
ne contient que des assignations et aucune syntaxe de shell, vous pouvez l’utiliser commeEnvironmentFile
.Via les
Environment
entréesCe qui précède pourrait également être accompli en utilisant le remplacement suivant:
Cependant, cela peut devenir délicat avec plusieurs variables, espaces, etc. Jetez un coup d'œil à l' une de mes autres réponses pour obtenir un exemple d'un tel exemple.
Lectures complémentaires
Grâce à ce mécanisme, il devient très facile de remplacer des
systemd
unités, ainsi que d'annuler de telles modifications (en supprimant simplement le fichier de substitution). Ce ne sont pas les seuls paramètres qui peuvent être modifiés.Les liens suivants seraient utiles:
systemd
systemd
pages de manuel , en particulier les pages de manuel desystemd.unit
etsystemd.service
la source
systemd.service(5)
page de manuel , sectionExecStart
: "À moins que Type = onehot, une seule commande doit être donnée. Lorsque Type = onehot est utilisé, vous pouvez spécifier zéro ou plusieurs commandes. Vous pouvez spécifier des commandes en fournissant plusieurs lignes de commande directive ou cette directive peut être spécifiée plusieurs fois avec le même effet. Si la chaîne vide est affectée à cette option, la liste des commandes à démarrer est réinitialisée, les attributions précédentes de cette option n'auront aucun effet. "sudo rm
le fichier de remplacement, puissystemctl daemon-reload
vous pouvezsystemctl edit
tout remplacer dans le remplacement par des commentaires. Les commentaires dans les fichiers de service commencent par#
.systemctl revert foo