Удаленно запускать Linux-скрипт из Windows и получать код результата выполнения
У меня есть текущий сценарий: мне нужно запланировать резервное копирование сервера моей компании на базе Linux (под Suse Linux) с помощью ARCServe R15 (установленного в Windows 2003R2SP2). Я знаю, что в моем программном обеспечении для резервного копирования (ARCServe) есть возможность добавлять сценарии до / после выполнения в мои задания резервного копирования. В случае сбоя сценария ARCServe будет указан НЕ для запуска задания резервного копирования, а в случае успеха - для запуска. У меня нет проблем с этим.
Проблема в том, что я хочу создать Windows-скрипт (запускаемый ARCServe) для выполнения Linux-скрипта в кластере: - Если этот Linux-скрипт не работает, я хочу, чтобы мой Windows-скрипт не работал, поэтому задание резервного копирования в ARCServe не будет работать - если Linux-скрипт завершится успешно, я хочу, чтобы мой windows-скрипт нормально заканчивался с кодом ошибки 0, поэтому мое задание ARCServe будет работать нормально. Я попытался создать этот пакетный файл (назовем его HPC.bat):
эхо ВКЛ
запустить / подождать "C:\Program Files\PUTTY\plink.exe" -v -l root -i "C:\IST\admin\scripts\HPC\pri.ppk" [имя_кластера] /appli/admin/backup_admin
выход%errorlevel%
Если я вручную запускаю этот.bat, дважды щелкнув по нему или запустив его в командной строке под Windows, он выполняется нормально, а затем завершается. Если я сделаю так, чтобы ARCServe запускал его, сценарий никогда не закончится. Моя работа остается в состоянии "ожидания", кажется, что код выполнения скрипта linux не возвращается в мой командный файл, и этот не закрывается. На мой взгляд, происходит то, что plink просто открывает соединение с Linux, отправляет сигнал выполнения скрипта, а затем закрывает соединение, чтобы код выполнения не мог быть возвращен пакету. Я прав?
Возможно ли то, что я хочу сделать, или я пытаюсь сделать что-то невозможное? Итак, я должен действовать по-другому? Должен ли я использовать PUTTY или CygWin вместо plink? Пожалуйста, это вызывает у меня головную боль...
1 ответ
Если вы установите Cygwin, вы можете сделать это точно так же, как вы можете сделать это на Linux на Linux, то есть удаленно запустить команду с ssh someuser@remoteserver.com somecommand
Эта команда будет возвращаться с тем же кодом возврата на вызывающем клиенте, что и команда, завершенная с удаленного конца. Если вы используете общие ключи SSH для аутентификации вместо паролей, это также может быть написано без участия пользователя.