J'ai trouvé ce fichier de service Systemd pour démarrer autossh afin de conserver un tunnel ssh: https://gist.github.com/thomasfr/9707568
[Unit]
Description=Keeps a tunnel to 'remote.example.com' open
After=network.target
[Service]
User=autossh
# -p [PORT]
# -l [user]
# -M 0 --> no monitoring
# -N Just open the connection and do nothing (not interactive)
# LOCALPORT:IP_ON_EXAMPLE_COM:PORT_ON_EXAMPLE_COM
ExecStart=/usr/bin/autossh -M 0 -N -q -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -p 22 -l autossh remote.example.com -L 7474:127.0.0.1:7474 -i /home/autossh/.ssh/id_rsa
[Install]
WantedBy=multi-user.target
Existe-t-il un moyen de configurer systemd pour démarrer plusieurs tunnels dans un service.
Je ne veux pas créer de fichiers de service système N, car je veux éviter le copier-coller.
Tous les fichiers de service seraient identiques à l'exception de "remote.example.com" qui serait remplacé par d'autres noms d'hôte.
1,5 an plus tard ...
J'ai posé cette question il y a environ un an et demi.
Mon esprit a un peu changé. Oui, c'est bien, vous pouvez le faire avec systemd (je l'utilise toujours), mais j'utiliserai la gestion de la configuration à l'avenir.
Pourquoi systemd devrait-il implémenter un langage de template et substituer% h?
Plusieurs mois plus tard, je pense que cette boucle et ces modèles devraient être résolus avec un outil qui automatise la configuration. J'utilise un outil de cette liste sur wikipedia maintenant.
Réponses:
Eh bien, en supposant que la seule chose qui change par fichier d'unité est la
remote.example.com
pièce, vous pouvez utiliser un service instancié .De la
systemd.unit
page de manuel:Fondamentalement, vous créez un fichier unité unique, qui contient une variable (généralement
%i
) où se produisent les différences, puis elles sont liées lorsque vous "activez" ce service.Par exemple, j'ai un fichier d'unité appelé
/etc/systemd/system/[email protected]
qui ressemble à ceci:Que j'ai ensuite activé
Et peut interagir avec
Comme vous pouvez le constater, toutes les instances du
%i
fichier unité sont remplacées parsomehost.example.com
.Il y a beaucoup d'autres spécificateurs que vous pouvez utiliser dans un fichier unité, mais je trouve que cela
%i
fonctionne mieux dans des cas comme celui-ci.la source
enable
action qui fait qu'une unité / un service démarre au démarrage.Voici un exemple en python, ce que je recherchais. Le
@
nom de fichier du service vous permet de démarrer N processus:Diverses méthodes pour l'appeler
Activer différents comptes, par exemple:
Activer 30 travailleurs:
Activer 2 travailleurs:
Alors assurez-vous de recharger:
Vous pouvez maintenant démarrer / arrêter de différentes manières:
Début 1:
Commencer plusieurs:
Stop Multiple:
Vérifier l'état:
UPDATE : Pour gérer les instances en tant que service unique, vous pouvez procéder comme suit:
/etc/systemd/system/[email protected]:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
Et maintenant, vous pouvez gérer toutes les instances avec
sudo systemctl some-worker (start|restart|stop)
Voici un passe-partout pour votre
script.py
:la source
systemctl some-worker (start|restart|stop)
savoir sur quelles instances travailler?Now you can start/stop then in various ways
.La réponse de GregL m'a beaucoup aidé. Voici un exemple de modèle d'unité que j'ai utilisé dans mon code en utilisant l'exemple ci-dessus pour un serveur de travaux d'engrenage. J'ai créé un script shell qui me permet de créer une quantité X de "travailleurs" à l'aide de ce modèle.
la source