Encontré este archivo de servicio systemd para iniciar autossh para mantener un túnel 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
¿Hay alguna manera de configurar systemd para iniciar varios túneles en un servicio?
No quiero crear archivos de servicio del sistema N, ya que quiero evitar copiar y pegar.
Todos los archivos de servicio serían idénticos, excepto que "remote.example.com" se reemplazaría con otros nombres de host.
1.5 años después ...
Hice esta pregunta hace aproximadamente 1,5 años.
Mi mente ha cambiado un poco. Sí, es bueno que pueda hacer esto con systemd (todavía lo uso), pero usaré la gestión de configuración en el futuro.
¿Por qué systemd debería implementar un lenguaje de plantilla y sustituir% h?
Varios meses después, creo que este ciclo y la plantilla deberían resolverse con una herramienta que automatice la configuración. Ahora uso una herramienta de esta lista en wikipedia .
Respuestas:
Bueno, suponiendo que lo único que cambia por archivo de unidad es la
remote.example.com
parte, puede usar un Servicio instanciado .Desde la
systemd.unit
página del manual:Básicamente, crea un archivo de unidad única, que contiene una variable (generalmente
%i
) donde ocurren las diferencias y luego se vinculan cuando "habilita" ese servicio.Por ejemplo, tengo un archivo de unidad llamado
/etc/systemd/system/[email protected]
que se ve así:Que luego he habilitado
Y puede interactuar con
Como puede ver, todas las instancias del
%i
archivo de la unidad se reemplazan consomehost.example.com
.Sin embargo, hay muchos más especificadores que puedes usar en un archivo de unidad, pero creo
%i
que funciona mejor en casos como este.fuente
enable
acción es lo que hace que una unidad / servicio comience en el arranque.Aquí hay un ejemplo de Python, que era lo que estaba buscando. El
@
nombre de archivo en el servicio le permite iniciar N procesos:Varios métodos para llamarlo
Habilitar varios recuentos, por ejemplo:
Habilitar 30 trabajadores:
Habilitar 2 trabajadores:
Entonces asegúrese de recargar:
Ahora puede iniciar / detener luego de varias maneras:
Inicio 1:
Inicio múltiple:
Detener múltiples:
Comprobar estado:
ACTUALIZACIÓN : para administrar instancias como un servicio, puede hacer algo como esto:
/etc/systemd/system/[email protected]:
/usr/bin/some-worker-start.sh:
/etc/systemd/system/some-worker.service:
Y ahora puede administrar todas las instancias con
sudo systemctl some-worker (start|restart|stop)
Aquí hay algunos ejemplos para su
script.py
:fuente
systemctl some-worker (start|restart|stop)
sabe en qué instancias trabajar?Now you can start/stop then in various ways
.La respuesta de GregL me ayudó mucho. Aquí hay un ejemplo de una plantilla de unidad que utilicé en mi código usando el ejemplo anterior para un servidor de trabajo gearman. Hice un script de shell que me permite crear una cantidad X de "trabajadores" usando esta plantilla.
fuente