我正在从我们的 Web 服务器到我们的 MySQL 服务器建立隧道,两者都在 Solaris 机器上。我为 ssh 隧道创建了一个 SMF 清单,以便在 Web 服务器机器重新启动时重新连接。这很有效。
问题是我不确定 MySQL 重启后该做什么。隧道的外部关闭被传递给 SMF,SMF 会尝试快速连续重启隧道 3 次,然后才将服务置于维护模式。有没有办法指定“重试次数”或类似的东西?还有其他方法可以解决这个问题吗?
这是我正在使用的 SMF。
<?xml version="1.0"?>
<!DOCTYPE service_bundle SYSTEM "/usr/share/lib/xml/dtd/service_bundle.dtd.1">
<service_bundle type='manifest' name='ssh-tunnel'>
<service
name="network/ssh-tunnel"
type="service"
version="1">
<create_default_instance enabled="false"/>
<single_instance />
<dependency
name='nameservice'
type='service'
grouping='require_all'
restart_on='none'>
<service_fmri value='svc:/milestone/name-services' />
</dependency>
<exec_method
type='method'
name='start'
exec='/usr/bin/ssh -fNx -L 3307:127.0.0.1:3306 mysql1'
timeout_seconds='0'>
</exec_method>
<exec_method
type='method'
name='stop'
exec=':kill'
timeout_seconds='0'>
</exec_method>
</service>
</service_bundle>
答案1
exec
您可以在变量的“exec_method”部分中指定两次命令执行之间等待的时间timeout_seconds
。如果您将其设置为 60,它将立即尝试等待 1 分钟,然后重试并等待并尝试。您设置的值取决于 MySQL 框的启动时间。
另一种方法是指定一个sleep
命令作为的一部分exec
,例如在运行 ssh 之前等待 1 分钟:
exec='sleep 60 && /usr/bin/ssh -fNx -L 3307:127.0.0.1:3306 mysql1'
嗯,