Назад | Перейти на главную страницу

Solaris SMF для туннеля ssh

Я туннелирую с нашего веб-сервера на наш сервер 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,