Migrar script upstart básico para systemd

16

Acabei de atualizar um servidor do Ubuntu 14.10 para o 15.04, e alguns serviços que inicio por meio de scripts de inicialização prontos não estão mais em execução.

Meu entendimento é que preciso reescrevê-los como systemd services, mas o pensamento de aprender todo o sistema systemd da noite para o dia é um pouco assustador.

O script iniciante simplesmente inicia autossh na inicialização e eu tenho alguns outros scripts semelhantes que iniciam processos de longa execução.

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

Como posso reescrever isso como um systemd service?

    
por trvrm 22.05.2015 / 01:29

1 resposta

12

a primeira regra para migrar para o systemd

Neste momento, em 2015, é mais provável que alguém já tenha feito isso.

O

systemd existe há alguns anos. E tem havido toda uma indústria caseira de pessoas escrevendo arquivos unitários e publicando-os. O GitHub, em particular, parece atrair repositórios de coleções de unidades de serviço.

Realmente, basta pesquisar na WWW por autossh.service (como uma frase):

uma unidade de modelo

Dito isso, como apontei em vários lugares no StackExchange sozinho, esse tipo de migração não é um processo mecanicista e, às vezes, apenas traduzir de forma robotizada o que se tem para um arquivo de unidade é fazer coisas erradas ou pelo menos mal. Nesse caso, autossh está positivamente ansioso para ser tratado com uma unidade de modelo , que é instanciado em unidades de serviço reais, parametrizadas pelo nome de destino. Então, como /etc/systemd/system/[email protected] , tenha:

[Unit]
Description=AutoSSH service for a reverse tunnel from %i 
After=network.target

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

[Install]
WantedBy=multi-user.target

Crie um arquivo chamado /etc/autossh/other_server.example.conf com, minimamente:

SSH_USER=joe

Todos os controles usuais se aplicam:

  • systemctl enable autossh@other_server.example - permite que uma instância seja iniciada automaticamente no bootstrap.
  • systemctl start autossh@other_server.example - inicie manualmente essa instância imediatamente.
  • systemctl status autossh@other_server.example - Veja seu status.

E sim, a primeira regra se aplica a isso. Pesquisando, pode-se descobrir que fui espancado até isso, por pouco menos de quinze dias, por Greg Freemyer no OpenSUSE.

    
por JdeBP 22.05.2015 / 09:08