我正在尝试编写一个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