Migrar script básico de iniciação para systemd

17

Acabei de atualizar um servidor do Ubuntu 14.10 para o 15.04, e alguns serviços iniciados por meio de scripts upstart personalizados não estão mais em execução.

Meu entendimento é que preciso reescrevê-los como systemdserviços, mas o pensamento de aprender todo o systemdsistema da noite para o dia é um pouco assustador.

O script inicial inicia simplesmente autosshna inicialização, e eu tenho alguns outros scripts semelhantes que iniciam processos de execução longa.

#/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 systemdserviço?

trvrm
fonte
3
O Systemd para usuários iniciantes é um bom ponto de partida.
muru

Respostas:

13

a primeira regra para migrar para o systemd

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

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

Na verdade, basta pesquisar na WWW autossh.service(como uma frase):

uma unidade de modelo

Dito isso, como já mostrei em vários lugares apenas no StackExchange, esse tipo de migração não é um processo mecanicista e, às vezes, apenas a tradução robótica de tudo o que se tem para um arquivo de unidade está fazendo as coisas de maneira errada ou, pelo menos, mal. Nesse caso, autosshestá ofegando positivamente para ser manipulado com uma unidade de modelo , que é instanciada em unidades de serviço reais, parametrizadas pelo nome do destino. Então /etc/systemd/system/[email protected], tem:

[Unidade]
Descrição = serviço AutoSSH para um túnel reverso de% i 
Depois = network.target

[Serviço]
Usuário = autossh
EnvironmentFile = / etc /% p /% i.conf
ExecStart = / usr / bin / autossh -M 0 -q -N $ SSH_USER @% i $ SSH_OPTIONS

[Instalar]
WantedBy = multi-user.target

Crie um arquivo nomeado /etc/autossh/other_server.example.confcom, no mínimo:

SSH_USER = joe

Todos os controles usuais são aplicados:

  • systemctl enable autossh@other_server.example - Permita 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 derrotado por isso, pouco menos de duas semanas, por Greg Freemyer no OpenSUSE.

JdeBP
fonte
Obrigado - eu vim com algo semelhante a isso, mas eu não estava ciente da ideia de 'unidades de modelo'
trvrm
@ JdeBP Eu também tenho uma pergunta semelhante aqui . Queria ver se você pode me ajudar.
User1950349