Migrar script de inicio básico a systemd

17

Acabo de actualizar un servidor de Ubuntu 14.10 a 15.04, y un par de servicios que inicio a través de scripts de inicio personalizados ya no se están ejecutando.

Entiendo que necesito reescribirlos como systemdservicios, pero la idea de aprender todo el systemdsistema durante la noche es un poco desalentador.

El script inicial simplemente se inicia autosshal inicio, y tengo un par de otros scripts similares que inician procesos de larga duración.

#/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

¿Cómo puedo reescribir esto como un systemdservicio?

trvrm
fuente
3
Systemd para usuarios de Upstart es un buen punto de partida.
muru

Respuestas:

13

la primera regla para migrar a systemd

En este punto, en 2015, es muy probable que alguien ya lo haya hecho.

systemd ha existido por algunos años. Y ha habido toda una industria artesanal de personas escribiendo archivos de unidades y publicándolos. GitHub, en particular, parece atraer repositorios de colecciones de unidades de servicio.

De hecho, simplemente buscando en la WWW autossh.service(como una frase) aparece:

una unidad de plantilla

Dicho esto, como he señalado en varios lugares solo en StackExchange, este tipo de migración no es un proceso mecanicista, y a veces solo la traducción robótica de lo que sea que tenga a un archivo de unidad está haciendo las cosas mal, o al menos mal. En este caso, autosshestá jadeando positivamente para ser manejado con una unidad de plantilla , que se instancia en unidades de servicio reales, parametrizadas por el nombre del objetivo. Entonces /etc/systemd/system/[email protected], como :

[Unidad]
Descripción = Servicio AutoSSH para un túnel inverso desde% i 
Después = network.target

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

[Instalar en pc]
WantedBy = multi-user.target

Cree un archivo llamado /etc/autossh/other_server.example.confcon, como mínimo:

SSH_USER = joe

Todos los controles habituales se aplican:

  • systemctl enable autossh@other_server.example - Permitir que una instancia se inicie automáticamente en bootstrap.
  • systemctl start autossh@other_server.example - Inicie manualmente esa instancia de inmediato.
  • systemctl status autossh@other_server.example - Ver su estado.

Y sí, la primera regla incluso se aplica a esto. Buscando, uno puede encontrar que Greg Freemyer me golpeó en esto, por menos de quince días, en OpenSUSE.

JdeBP
fuente
Gracias. Se me ocurrió algo similar, pero no estaba al tanto de la idea de 'unidades de plantilla'
Trvrm
@JdeBP También tengo una pregunta similar aquí . Quería ver si puedes ayudarme.
user1950349