Сбой сценария sftp при сбое одного из операторов sftp в Linux

У меня есть сценарий OpenSSH sftp, который передает файлы с SFTP-сервера (Solaris) на сервер приложений (Linux). Здесь сценарий заключается в том, что передача происходит из другого места, и одни и те же файлы передаются резервной копией на SFTP-сервер в другое место. Но если какой-либо из переносов завершится неудачно из-за того, что файл недоступен, оставшиеся sftp команды не будут продолжены. Вместо этого он просто выходит из кода. Ниже приведен сценарий.

export SSHPASS=*******
/usr/local/bin/sshpass -e sftp -oPort=22 -oBatchMode=no -b - [email protected] << !

cd /home/rkwlahtt/Inbound
mget *.*
rm *.*
cd /home/rkwlahtt/Inbound/Adhoc
mget *.*
rm *.*
cd /home/rkwlahtt/Archive/Inbound
mput *.TXT
mput *.txt
cd /home/rkwlahtt/Archive/Adhoc
mput *.xlsx
bye
!

Здесь, в приведенном выше сценарии, когда я пытаюсь mget из папки /home/rkwlahtt/Inbound, и если файл не существует, он просто выходит из кода sftp вместо перехода к следующей команде, которая является cd /home/rkwlahtt/Inbound/Adhoc и mget. Такая же ситуация и с mput тоже.

Это первый раз, когда мы переносим из другого места в одном и том же коде. И это создает проблему в нашей передаче.

Пожалуйста, дайте мне знать, что можно сделать, чтобы решить эту проблему.


person user3441224    schedule 15.03.2016    source источник


Ответы (1)


Вы можете подавить прерывание при ошибке для каждой команды, используя префикс -:

-mget *.*

Другой вариант — удалить переключатель -b -.

Переключатель вызывает прерывание после любого сбоя.

Даже без переключателя вы все равно можете передавать команды, используя перенаправление ввода, как вы это делаете.

Хотя вам нужно убедиться, что ни одна команда не будет запрашивать какие-либо данные. Так как тогда некоторые из ваших команд будут использоваться в качестве входных данных, а не выполняться.

person Martin Prikryl    schedule 15.03.2016
comment
Прохладный. Это сработало. Итак, что именно означает -b -. Я думал -b для пакетного файла. И этот оператор строки /usr/local/bin/sshpass -e sftp -oPort=22 -oBatchMode=no -b - [email protected] ‹‹ ! На самом деле я получил какую-то ссылку в Google, чтобы решить проблему с использованием sshpass. Я просто продолжаю использовать в большинстве сценариев, которые используются для передачи файла из одного места в коде. Но для этого нашим требованием был перевод из двух мест. Во всяком случае, это работает сейчас. Просто позвольте мне, что именно означает это -b -. Пробовал искать в гугле. Ничего толком не нашел. - person user3441224; 15.03.2016
comment
-b делает две вещи. Во-первых, он включает пакетный режим (= прерывание любой ошибки), во-вторых, устанавливает файл сценария. За исключением случаев, когда вы используете - вместо имени файла сценария, и в этом случае команды считываются из стандартного ввода, что является значением по умолчанию. Вам не нужен второй эффект (поскольку вы все равно используете -) и вам не нужен первый. См. sftp справочную страницу: freebsd.org/cgi/man.cgi? запрос=sftp&sektion=1 - person Martin Prikryl; 15.03.2016