Переслать pg_dump до 2 различных psql, один файл журнала, но не консоль

По моему опыту, даже lbuntu использует изрядное количество ресурсов. У меня был хороший опыт работы с Puppy на старом оборудовании, он обновил непригодную для использования машину Windows 95.

Это сообщение расширяет тему: Что такое небольшая бесплатная ОС Unix / Linux?

2
29.01.2019, 19:05
2 ответа
pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee -a >"${LOGFILE}" >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}") 

Почему?

Потому что слева направо:

  1. pg_dumpвыходит на стандартный вывод
  2. 2>&1выводит поток ошибок на стандартный вывод
  3. |направляет стандартный вывод и ошибку
  4. от
  5. до tee -a, что сохранит содержимое канала и перешлет его (с опцией добавления по крайней мере для первой пересылки )нескольким командам
  6. >"${LOGFILE}"СНАЧАЛА я хочу зарегистрировать дамп pg _stdout или errout. Обратите внимание на синтаксис для этого :без ()вокруг имени файла. Я использую переменную в своем сценарии.
  7. >(psql -p 5432 -U postgres db-project >>"${LOGFILE}")ЗАТЕМ моя первая КОПИРОВКА в качестве команды psql (с закрывающей скобкой для команды)
  8. >>"${LOGFILE}"внутри предыдущей строки, я использую это, чтобы добавить (double>)к моему файлу stdout psql (Я не получаю здесь ошибку, я мог бы.
  9. >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")ЗАТЕМ вторая команда psql со вторым добавлением стандартного вывода в файл журнала.
  10. Нет вывода на консоль, все держится на тройнике, похоже (не знаю почему если честно ).

Надеюсь, это поможет некоторым людям понять варианты использования тройников и труб.

Редактировать :моя последняя команда

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")

Стандартный вывод удаляется, а не загрязняется файл журнала. Было бы лучше сохранить поток ошибок в файле журнала с помощью

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>"${LOGFILE}" | tee -a > /dev/null >(psql -p 5432 -U postgres db-project >>"${LOGFILE}") >(psql -p 5432 -U postgres db-gp-projet >>"${LOGFILE}")

но это еще не проверено.

2
27.01.2020, 22:02

Изменение перенаправления двумя способами должно решить эту проблему. 1 )Перенаправить потоки вывода и ошибок для каждой команды. 2 )Измените оператор перенаправления так, чтобы он добавлял файл журнала, а не перезаписывал его.

Последняя команда должна выглядеть так:

pg_dump -a -t table-country -p 5432 -U usr db-maint2  2>&1 | tee >(psql -p 5432 -U postgres db-project &>> "initDB_$(date +%Y%m%d_%H%M).log") >(psql -p 5432 -U postgres db-gp-projet &>> "initDB_$(date +%Y%m%d_%H%M).log") &>> "initDB_$(date +%Y%m%d_%H%M).log"

Вывод команды pg_dumpдоставляется команде tee, которая указана в этой форме:

tee file1 file2 &>> logfile

В данном случае аргументы файл1 и файл2 просто являются процессами. teeзапишет вывод предыдущей команды в файл1, файл2, а затем в стандартный вывод. Стандартный вывод перехватывается и перенаправляется в файл журнала (в режиме добавления ).

Вывод, записанный в файл1, доставляется команде psql, которая устанавливает собственное перенаправление для стандартного вывода и ошибок. То же самое происходит и со второй командой psql.

Так как имя файла журнала получается с помощью команды dateи имеет лишь минутную точность на уровне -, добавление необходимо для предотвращения возможной перезаписи файла журнала. В качестве альтернативы выходные данные также могут быть доставлены в другие файлы журналов.

1
27.01.2020, 22:02

Теги

Похожие вопросы