web-dev-qa-db-fra.com

Migrer le script de base de démarrage vers systemd

Je viens de mettre à niveau un serveur d'Ubuntu 14.10 à 15.04 et quelques services que je lance via des scripts de démarrage personnalisés ne sont plus en cours d'exécution.

Si j'ai bien compris, je dois les ré-écrire sous la forme de services systemd, mais l'idée d'apprendre le système entier systemd du jour au lendemain est un peu intimidante.

Le script upstart lance simplement autossh au démarrage, et j'ai quelques autres scripts similaires qui lancent des processus longs.

#/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 ceci en tant que service systemd?

16
trvrm

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 composée de personnes écrivant et publiant des fichiers d'unité. GitHub, en particulier, semble attirer des dépôts de collections d'unités de service.

En effet, il suffit de rechercher le WWW pour autossh.service (comme une phrase):

une unité de gabarit

Cela dit, comme je l'ai déjà souligné à plusieurs endroits sur StackExchange uniquement, ce type de migration n'est pas un processus mécanique, et parfois, le simple fait de traduire de manière robotique ce que l'on a dans un fichier d'unité fait mal les choses, ou du moins, mal. Dans ce cas, autossh attend absolument d'être traité avec une unité de modèle , qu'il soit instancié en unités de service réelles, paramétré par le nom de la cible. Donc, en tant que /etc/systemd/system/[email protected], as:

 [Unité] 
 Description = Service AutoSSH pour un tunnel inverse de% i 
 Après = network.target 
 
 [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.conf avec au minimum:

SSH_USER = joe

Tous les contrôles habituels s'appliquent alors:

  • systemctl enable autossh@other_server.example - Permet à une instance d'être automatiquement démarrée 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 Greg Freemyer d’OpenSUSE l’a battue de près de quinze jours à peine.

12
JdeBP