Migrer le script de démarrage basique vers systemd


17

Je viens de mettre à niveau un serveur d'Ubuntu 14.10 à 15.04, et quelques services que je démarre via des scripts upstart personnalisés ne fonctionnent plus.

Ma compréhension est que je dois les réécrire en tant que systemdservices, mais l'idée d'apprendre le systemdsystème entier du jour au lendemain est un peu intimidante.

Le script upstart se lance simplement autosshau démarrage, et j'ai quelques autres scripts similaires qui lancent des processus de longue durée.

#/etc/init/autossh.conf

description "Maintain a permanent SSH tunnel to <other_server>"

start on started mountall
stop on shutdown

exec autossh -N other_server

Comment puis-je réécrire cela en tant que systemdservice?


3
Systemd pour les utilisateurs Upstart est un bon point de départ.
muru

Réponses:


13

la première règle pour migrer vers systemd

À ce stade, en 2015, il est fort probable que quelqu'un l'ait déjà fait.

systemd existe depuis quelques années. Et il y a eu toute une industrie artisanale de personnes écrivant des fichiers d'unité et les publiant. GitHub, en particulier, semble attirer des référentiels de collections d'unités de service.

En effet, une simple recherche sur le WWW autossh.service(en tant que phrase) apparaît:

une unité modèle

Cela dit, comme je l'ai souligné à plusieurs endroits sur StackExchange seul, ce type de migration n'est pas un processus mécaniste, et parfois, simplement la traduction robotique de tout ce que l'on a vers un fichier d'unité fait mal ou du moins mal. Dans ce cas, autosshest haletant positivement pour être manipulé avec une unité de modèle , qu'il est instancié en unités de service réelles, paramétrées par le nom cible. Alors /etc/systemd/system/autossh@.service, ayez:

[Unité]
Description = Service AutoSSH pour un tunnel inverse à partir de% i 
Après = network.target

[Un service]
Utilisateur = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Installer]
WantedBy = multi-user.target

Créez un fichier nommé /etc/autossh/other_server.example.confavec, au minimum:

SSH_USER = joe

Tous les contrôles habituels s'appliquent alors:

  • systemctl enable autossh@other_server.example - Activer le démarrage automatique d'une instance au démarrage.
  • systemctl start autossh@other_server.example - Démarrez manuellement cette instance immédiatement.
  • systemctl status autossh@other_server.example - Voir son statut.

Et oui, la première règle s'applique même à cela. En cherchant, on peut constater que j'ai été battu à cela, par un peu moins de quinze jours, par Greg Freemyer à OpenSUSE.


Merci - j'ai trouvé quelque chose de similaire, mais je n'étais pas au courant de l'idée des «unités de modèle»
trvrm

@JdeBP J'ai également une question similaire ici . Je voulais voir si vous pouviez m'aider.
user1950349
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.