Far2k
@Far2k

Как правильно в bash скрипте использовать $?

Доброго дня, коллеги!
Совершенно не знаю bash, но необходимо написать простенький скриптик, который делает дамп postgres, после чего, если комманда с дампом выполнилась, проверяет директорию в которую делается дамп, и удаляет лишние дампы, которые старше 25 дней.
Или я не правильно пользуюсь $? или проблема в синтаксисе, подскажите пожалуйста, где у меня ошибка?
#!/bin/bash
d=$(date +%Y-%m-%d-%H%M%S)
n=zkgu
pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz
EXIT_STATUS=$?
if [[$EXIT_STATUS -eq "0"]]
then
find /mnt/NStore/1c-sqldump/ -type f -mtime +25 -delete
else
echo "$d The dump didn't happen" >> /var/log/pgdump.log
fi


Я осознаю, что не проверненный бекап, это почти бесполезный бекап, но пока нет другого варианта, и я осознанно иду на этот риск, решение временное.
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
saboteur_kiev
@saboteur_kiev Куратор тега bash
software engineer
#!/bin/bash
d=$(date +%Y-%m-%d-%H%M%S)

if pg_dump -U postgres zkgu -F c -Z 1 -f /mnt/NStore/1c-sqldump/$n$d.gz; then
  find /mnt/NStore/1c-sqldump/ -type f -mtime +25 -delete
else
  echo "$d The dump didn't happen" >> /var/log/pgdump.log
fi
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
jcmvbkbc
@jcmvbkbc
"I'm here to consult you" © Dogbert
дамп postgres, после чего, если комманда с дампом выполнилась…
pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz
EXIT_STATUS=$?
if [[$EXIT_STATUS -eq "0"]]

Вместо двух лишних действий с текстовым представлением то же самое можно сделать идиоматично:
if pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz


Но есть одно "но": написанная вами команда делает не то, что вы хотели: $? -- это статус завершения последней команды, а у вас там пайплайн и последняя команда -- gzip. Статус завершения именно pg_dump не проверяется, ни первым вариантом, ни вторым.
Ответ написан
Комментировать
CityCat4
@CityCat4
Внимание! Изменился адрес почты!
pg_dump -U postgres zkgu | gzip > /mnt/NStore/1c-sqldump/$n$d.gz

Если pg_dump по какой-то причине сломался, gzip ничего не получит и если ошибку и вернет - то не имеющую никакого отношения к pg_dump

Нужно проверять правильность завершения pg_dump, а уже потом, если не сломался - паковать и удалять лишнее.
То есть уберите из строки выше gzip и внесите упаковку в блок if-then
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы