#bash #amazon-web-services #shell #amazon-s3 #tar
Вопрос:
Я сжимаю файл резервной копии БД, а затем загружаю его в S3.
Он работает и успешно загружается, но я не знаю, как подтвердить его успешность. Так как я не получаю никаких выходных данных.
COMPRESSING_0=`tar cvzf - $BACKUP_PATH_DB/$YEAR_MONTH/${DB_NAME}-${DATE}.bak` | UPLOADING_TO_S3_0=`aws s3 cp - s3://db-bckp/db/${DB_NAME}.tar.gz`
Вопрос:
- 1: Как я могу проверить сжатие tar из конвейера?
- 2: Как я могу подтвердить, что он успешно загружен в S3 (поскольку он ничего не возвращает)?
Комментарии:
1. Если он «работает и успешно загружается», что именно вы хотите проверить? Кажется, все в порядке.
2. @Marcin, что это было успешно. Так что я могу запланировать это в кукурузе… Например, загрузка файла S3 ничего не возвращает.
3. Вы имеете в виду какую-то контрольную сумму хэша или существует ли файл после загрузки в S3?
4. @Marcin, был ли он успешно обновлен. Я не хочу хэшировать загруженный файл. Просто хочу убедиться, что сжатие tar было успешным.
5. Извините, но меня смущает ваш код. Вы уверены, что это работает? Потому что, насколько я понимаю, это не сработает, по крайней мере, не так, как вы думаете, что это работает.
Ответ №1:
При работе с каналами в bash, если вы хотите прочитать коды возврата каждой команды, вы будете использовать переменную PIPESTATUS
массива.
PIPESTATUS
определяется для каждой выполняемой команды (с использованием канала или без него).
Вот пример:
$ x=`ls /root >/dev/null 2>amp;1` | y=`lsx / >/dev/null 2>amp;1`
$ echo ${PIPESTATUS[*]}
2 127
2
Это код возврата для первой команды (ls
)127
Это код возврата для второй команды (неизвестноlsx
)