Я туннелирую с нашего веб-сервера на наш сервер MySQL, оба на ящиках Solaris. Я создал SMF-манифест для туннеля ssh, чтобы повторно подключиться при перезагрузке окна веб-сервера. Это прекрасно работает.
Проблема в том, что я не уверен, что делать при перезагрузке MySQL. Это внешнее закрытие туннеля передается в 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>
Вы можете указать, как долго ждать между запусками exec
в разделах exec_method в timeout_seconds
переменная. Если вы установите его на 60, он попытается немедленно подождать 1 минуту, затем повторить попытку и подождать и попробовать. Значение, которое вы должны установить, зависит от того, как MySQL загружается.
Другой способ сделать это - указать sleep
команда как часть exec
, например, подождать 1 минуту перед запуском ssh:
exec='sleep 60 && /usr/bin/ssh -fNx -L 3307:127.0.0.1:3306 mysql1'
hth,