service
依存関係を作成しようとしています。離れてシステムサービス。そのような奇妙なことを行うための「標準的な」方法はありますか?ユースケースは、起動時にリモートエンドポイントを準備する必要があるいくつかのレガシーソフトウェアです。
私は次のようなものを使用できることを知っています。これを待っているExecStartPre
特定のリモートTCPポートが利用可能になるまでサービスを確認/待機します(そしてリモート.socket
で簡単なデバイスを作成することもできます)。しかし、これはあまりにも過度のようです。 systemd自体が他のリモートsystemdと通信する方法はありますか?
答え1
ExecStartPre=systemctl --host=service-user@remote-host start remote-service
ローカルサービスファイルのExecStartPreで同様のものを使用することもできます。
答え2
リモートsystemdサービスがリモートサーバーにポートを開くと、ローカルsystemdサービスでそのポートが開いていることを確認できます。 bashでは、次のようなものを書くことができます。
while ! echo > /dev/tcp/remoteserver/someport; do
echo "waiting for remote service..."
sleep 5s
done
もちろん、ネットワークが復元されるまでこのサービスを開始しないようにsystemdに指示する必要があります。https://wiki.archlinux.org/index.php/Systemd#Running_services_after_the_network_is_up