Понятно, что не требуется поддерживать сценарий живым, но ssh.
Опять же, это то, для чего используется autossh
(для автоматического переподключения ssh-соединения при разрыве).
Установите KeepAlive
на false
или, если все еще требуется, вы можете настроить его, как показано ниже:
<key>KeepAlive</key>
<dict>
<key>SuccessfulExit</key>
<false/>
</dict>
Кроме того, хорошо добавить строку exit 0
вконец сценария.
Наконец, если это единственная цель скрипта, запустить autossh
, рассмотрите возможность добавления autossh
в launchd
.
plist
файл с autossh
(у меня нет среды для тестирования, но она должна работать.)
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>Debug</key>
<false/>
<key>Disabled</key>
<false/>
<key>KeepAlive</key>
<true/>
<key>Label</key>
<string>com.mgnewman.autossh</string>
<key>ProgramArguments</key>
<array>
<string>/opt/local/bin/autossh</string>
<string>-M</string>
<string>0</string>
<string>-N</string>
<string>-o</string>
<string>ExitOnForwardFailure=yes</string>
<string>-o</string>
<string>ServerAliveInterval=30</string>
<string>-o</string>
<string>ServerAliveCountMax=2</string>
<string>-R</string>
<string>19990:localhost:22</string>
<string>mnewman@korat.myddns.rocks</string>
<string>-p</string>
<string>10000</string>
</array>
<key>RunAtLoad</key>
<true/>
<key>StandardErrorPath</key>
<string>/Users/mnewman/Desktop/autossh.txt</string>
<key>StandardOutPath</key>
<string>/Users/mnewman/Desktop/autossh.txt</string>
<key>WorkingDirectory</key>
<string>/Users/mnewman/Documents</string>
</dict>
</plist>
Изменения:
Помещает autossh
в качестве аргумента программы для каждого фрагмента аргумента, за исключением -f
(для отправки в фоновом режиме), который больше не нужен.
Пропущена переменная окружения PATH
, поскольку у нас есть autossh
с полным путем.
Добро пожаловать.