Состояние завершения передачи SFTP - PullRequest
0 голосов
/ 30 августа 2018

У меня есть SFTP-код для передачи файла с удаленного сервера на мой локальный сервер с использованием команды «предпологать». Ниже приведен фрагмент моего сценария оболочки.

/usr/bin/expect<<EOF
spawn /usr/bin/sftp -o Port=$PORT $USER@$HOST
expect "$USER password:"
send "$PASSWORD\r"
expect "sftp>"
set timeout -1
send "get $FILE $LOCAL\r"
expect "sftp>"
send "bye\r"
sleep 1
EOF

Мои требования: Есть ли способ проверить завершение перевода?

Я открыт для любых предложений - проверка на основе размера файла (это будет отличным решением, но я предполагаю, что ограничение команд sftp не позволит сравнивать размеры исходного и переданного файла).

Или есть способ проверить на основе кодов возврата? если get равен 100%, он возвращает 0, в противном случае любой ненулевой код. Если это способ, как проверить это? Я имею в виду, как захватить частичную передачу? Или проблема сети? Или любой другой ожидаемый сценарии?

Я открыт для любого решения, кроме , ожидайте также . Как работает в пакетном режиме sftp или других опциях sftp, если есть?

Я использую AIX Unix, и я обязан использовать только SFTP.

Заранее спасибо!

1 Ответ

0 голосов
/ 16 октября 2018

Я бы использовал SCP вместо SFTP. Коды возврата оболочки в качестве статуса завершения. Что касается целостности загруженного артефакта, лучший способ - поместить контрольную сумму md5 рядом с файлом, который вы загружаете, и проверить его после завершения загрузки. Таким образом, у вас есть file.tar и file.md5 (которые сделаны md5sum file.tar > file.md5), вы загружаете оба и делаете проверку.

Если у вас есть какой-то другой скрипт, который должен ждать до завершения загрузки, для обработки загруженных файлов лучше создать файл .lock при запуске загрузки и удалить его после. Сценарий обработки должен ждать, пока файл .lock не исчезнет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...