Я автоматически создаю резервные копии и передаю файлы каждую ночь через scp.
Я понимаю, что получаю контрольные суммы на уровне пакетов через сам протокол, но мне интересно, как лучше всего убедиться, что передача не завершилась неудачно, не завершилась частично и т. Д.
Я мог бы использовать rsync, но мои потребности просты, и я просто хочу убедиться, что:
scp не гарантирует целостность файла, поэтому сравнение контрольных сумм между источником и местом назначения было бы разумным.
Вы упоминаете, что ваши потребности просты, но rsync не обязательно добавляет сложности и предлагает значительно больше функций, которые позволят вам чувствовать себя более уверенно, что ваши синхронизированные данные являются законными.
rsync -ave ssh /your/source/file remotehost:/your/dest/file
Если $?
(статус выхода) не равен 0 (успех), затем повторите попытку / предупреждение / и т. д. Если вы синхронизируете целые каталоги, rsync также намного лучше подходит для этого, особенно если вам нужно повторить попытку при сбое, так как инкрементная синхронизация будет значительно быстрее с каждым последующим запуском.
Я не совсем уверен, почему rsync не соответствует вашим простым потребностям.
rsync -avPe ssh user @ host: / that / dir / go / here
если вы действительно хотите использовать scp, просто зациклируйте свой scp и проверьте его условие выхода .. что-то вроде ..
#!/bin/bash
STATUS=1
while [ $STATUS -ne 0 ]; do
echo "scp'ing..."
scp -r thisstuff/ user@host:/overthere
STATUS=$?
done
scp вернет 0 в случае успеха и> 0 в случае ошибки.