autosshシステムスクリプトは起動時に失敗し、systemctlの再起動時に機能します。

autosshシステムスクリプトは起動時に失敗し、systemctlの再起動時に機能します。

監視サーバーの起動時にリモートサーバーにポートを転送するようにautosshサービスを設定しようとしています。ちょっとした詐欺を書いた後、結局は非常に基本的なシステムスクリプトを完成しましたが、一つの問題がありました。起動中はサービスが正常に起動しませんが、手動で起動するか、再起動後すぐにサービスが正常に起動します。

Description=AutoSSH tunnel service for Grafana to access mariadb on remote; local port 33060
After=network-online.target

[Service]
Environment="AUTOSSH_GATETIME=0"
ExecStart=/usr/bin/autossh -M 0 -N [email protected] -i /home/myuser/.ssh/id_rsa -o \"ServerAliveInterval 30\" -o \"ServerAliveCountMax 3\" -L 172.17.0.1:33307:127.0.0.1:3306

[Install]
WantedBy=multi-user.target

起動時に接続できません。 Journalctlの出力は次のようになります。

-- 
-- The job identifier is 152.
Apr 07 15:25:31 monitoring autossh[752]: port set to 0, monitoring disabled
Apr 07 15:25:31 monitoring autossh[752]: starting ssh (count 1)
Apr 07 15:25:31 monitoring autossh[752]: ssh child pid is 759
Apr 07 15:25:31 monitoring autossh[759]: bind [172.17.0.1]:33307: Cannot assign requested address
Apr 07 15:25:31 monitoring autossh[759]: channel_setup_fwd_listener_tcpip: cannot listen to port: 33307
Apr 07 15:25:31 monitoring autossh[759]: Could not request local forwarding.

すぐに sudo systemctl restart autossh-mariadb-tunnel.service を実行すると、接続が正常に動作します。

答え1

シェン。ここで質問と回答を1時間以上悩み、おかげで結果を見てみましたが、質問を提出したときにその答えが私に与えられました。手がかりはバインディングアドレスにあります。 172.17.0.1はドッカーインターフェースです。問題は、私はdockerインターフェースを聞いていますが、スクリプトにdockerを待つように指示しないことです。

そのため、2行目を次のように修正しました。

After=network-online.target docker.service

再起動すると、すべてが期待どおりに機能します。

関連情報