2014-12-03 3 views
0

У меня есть сценарий в локальной системе, который вызывает скрипт на удаленном сервере (сервер A) для выполнения. Команда в скрипте, который запускает сценарий удаленного сервера выглядитОбеспечить успешное выполнение скрипта на удаленном сервере

ssh <user>@<server ip> "bash -s < ./shell_backup_trx_db.sh" 

Script shell_backup_trx_db.sh на удаленном сервере происходит резервное копирование базы данных и помещает его на сервере файловой системы. Как я могу обеспечить внутри скрипта на локальном компьютере, который использует указанную выше команду, чтобы команда ssh выполнялась успешно и продолжала выполнение скрипта вперед или же прерывала его?

+0

Почему вы используете 'Баш -s <./Shell_backup_trx_db.sh' вместо просто' Баш shell_backup_trx_db.sh'? И если ваш скрипт существует с кодом возврата сбоя, я уверен, что ssh также будет, и вы можете проверить его локально. –

+0

спасибо @EtanReisner за ваш ответ, не уверенный в параметре -s, я просто нашел его во время поиска по сценарию через ssh. И что, если по какой-либо причине команда ssh не могла подключиться к удаленному серверу, делает ли ssh в этом случае что-нибудь? – arpitr

+1

Если он не может подключиться, он вернет ошибку, а это значит, что ваш следующий скрипт не будет запущен, если вы используете '&&' –

ответ

1

Пока удаленный сценарий возвращает соответствующий код выхода, у вас не должно быть проблем для этого.

Просто используйте условный оператор && управления, который продолжается с помощью следующей команды, только если предыдущая команда вышла без ошибки:

ssh <user>@<server ip> "/path/to/shell_backup_trx_db.sh" && echo "Done with backup"

Edit: Если вы хотите, чтобы выполнить несколько команд на основе ли SSH команда проходит или терпит неудачу, вы можете использовать оператор if..else..fi.

Пример:

if ssh <user>@<server ip> "/path/to/shell_backup_trx_db.sh"; 
then 
    echo "Backup completed successfully"; 
    ./next_script.sh; 
else 
    echo "Backup failed"; 
    exit; 
fi 
1

Чтобы выйти сценарий, когда SSH не удается (по какой-либо причине), вы можете использовать что-то вроде этого.

if ! ssh ...; then 
    echo ssh failed 
    exit 
fi 
+0

Я считаю, что это должно быть 'if..then..fi', а не' if..then..done' –

+0

@ Chirag64 Абсолютно правильно. Проблема с коммутацией контекста. Исправлена. Благодарю. –

0

благодаря @Chirag и @Etan за эти полезные ответы, с их помощью в конце концов.

if ssh <user>@<server-ip> stat shell_backup_trx_db.sh \> /dev/null 2\>\&1 
    then 
    # Trigger Production Database back for both mysql and mongo. 
    ssh <user>@<server-ip> "bash -s < ./shell_backup_trx_db.sh" 

    echo "Database backup successfully completed." 

    # Prompt user to check manually that database backup is completed successfully. 
    read -p "Ensure database backup process is successfully completed. Login to dev/stg server and run 'ls command'. Press [Enter] key to continue execution." 
    else 
    # Backup script could not be accessed, abort script execution any further. 
    echo "Back up script not found, aborting script execution, Please take backup before." 1>&2 
    exit 1 
    fi 
Смежные вопросы