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
?
À 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):
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.