serviço systemd confiável para autossh

5

Eu tento criar um serviço systemd confiável para o autossh.

O serviço funciona, mas se as chaves do host forem alteradas, o serviço está no estado ok (em execução).

Eu quero que ele esteja no estado "falhou" se o túnel não funcionar.

Aqui está o meu arquivo de serviço atual do systemd:

# Source is in srv/salt/tunnel/autossh\@.service
# which is a git repo.
# Don't edit /etc/systemd/system/autossh\@.service  
[Unit]
Description=Tunnel For %i
After=network.target

[Service]
User=autossh
# https://serverfault.com/a/563401/90324
ExecStart=/usr/bin/autossh -M 0 -N -o "ExitOnForwardFailure yes" -o "ConnectTimeout=1" -o "ServerAliveInterval 60" -o "ServerAliveCountMax 3" -R 40443:installserver:40443 -R 8080:installserver:8080 tunnel@%i
Restart=always

[Install]
WantedBy=multi-user.target

Aqui está a saída de systemctl status autossh@foo-work

salt:/srv # systemctl status autossh@foo-work
[email protected] - Tunnel For foo-work
      Loaded: loaded (/etc/systemd/system/[email protected]; enabled)
      Active: active (running) since Wed, 2016-02-10 14:35:01 CET; 2 months and 3 days ago
    Main PID: 17995 (autossh)
      CGroup: name=systemd:/system/[email protected]/foo-work
          └ 17995 /usr/bin/autossh -M 0 -N -o ExitOnForwardFailure yes -o ConnectTimeout=1 -o ServerAliveInterval 60 -o ServerAliveCountMax 3 -R 40443:installserver:40443 -R ...

Apr 14 12:35:43 salt autossh[17995]: Host key verification failed.
Apr 14 12:35:43 salt autossh[17995]: ssh exited with error status 255; restarting ssh
Apr 14 12:45:42 salt autossh[17995]: starting ssh (count 618)
Apr 14 12:45:42 salt autossh[17995]: ssh child pid is 22524
Apr 14 12:45:43 salt autossh[17995]: Host key verification failed.
Apr 14 12:45:43 salt autossh[17995]: ssh exited with error status 255; restarting ssh

Meu problema não é a chave do host alterada. Isso está ok.

Eu só quero que o serviço me diga a verdade: se o túnel não estiver funcionando, quero vê-lo.

Como posso alterar o arquivo de serviço do systemd para informar o status correto?

Atualização: escrevi uma segunda pergunta de acompanhamento: Como o systemd decide se um serviço é ok ou não?

    
por guettli 14.04.2016 / 13:12

1 resposta

1

O problema não é que ele falhou, mas que está considerando o serviço ativo, porque ele será reiniciado nos próximos 10 minutos.

Eu não tentei isso, mas pode funcionar. Tente adicionar Type=forking e PIDFile

[Service]
...
Type=forking
Environment="AUTOSSH_PIDFILE=/path/to/pid"
PIDFile=/path/to/pid

Com simple services, systemd pode ter problemas para rastreá-los.

    
por 14.04.2016 / 17:02