Делаю бэкап трех серверов PostgreSQL с запущенным скриптом pgdump через ssh. Командная строка в скрипте:
sudo -u barman ssh postgres@$SERVER 'pg_dump -Fc -b $database 2> ~/dump_error.txt' | gzip > $DUMP_ROOT/$SERVER-$BACKUPDATE.gz
Но размер дампа всегда около 1К, для всех серверов. Когда я выполняю эту строку в оболочке, просто заменяя переменные их значениями, это отлично работает. Он выполнил его как root (sudo -u barman ssh postgres@server ...) и как barman, так же, как пользователь barman (ssh postgres@server ...), дамп правильный.
Когда открываю дамп, вижу начало дампа, но вдруг он останавливается.
Файл dump_error.txt на серверах пуст.
В логах (журнале postgres и syslog), в бэкапе и серверах PostgreSQL ничего нет.
Пользователь barman может подключаться к серверу как пользователь postgres без пароля.
Ограничения оболочки достаточно высоки, чтобы не блокировать скрипт (открытые файлы 1024, размер файла не ограничен, максимальный пользовательский процесс 13098).
Я пытаюсь изменить cron час скрипта, думая, что процесс может потреблять все ресурсы, но это всегда одно и то же, и ps -e ничего особенного не показывает.
Версия postgreSQL 9.1.
Почему эта строка никогда не создает полный дамп при выполнении в сценарии, а только при выполнении в оболочке?
Спасибо за помощь, Денис