web-dev-qa-db-ja.com

autosshのための信頼できるsystemdサービス

Autossh用の信頼できるsystemdサービスを作成しようとしています。

サービスは機能しますが、ホストキーが変更された場合、サービスは正常な状態(実行中)です。

トンネルが機能しない場合は、「失敗」状態にします。

これが私の現在の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

これが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

私の問題は、変更されたホストキーではありません。それで大丈夫です。

サービスに真実を教えてもらいたいだけです。トンネルが機能していない場合は、トンネルに表示してもらいたいのです。

Systemdサービスファイルを変更して正しいステータスを教えてもらうにはどうすればよいですか?

更新:2番目のフォローアップ質問を書きました: systemdはサービスが正常かどうかをどのように判断しますか

5
guettli

問題は、失敗したことではなく、サービスがアクティブであると見なしていることです。これは、次の10分で再起動されるためです。

私はそれを試しませんでしたが、うまくいくかもしれません。 Type=forkingPIDFileを追加してみてください

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

simpleサービスでは、systemdはそれらを追跡するのに問題が発生する可能性があります。

1
Jakuje