Почему бы вместо этого не изменить тест systemctl status postgresql
в сценарии резервного копирования на что-то вроде этого?
...
if systemctl is-active postgresql
then
echo "PostgreSQL is active in non-clustered mode"
# add here any pre-backup commands specific to non-clustered mode
elif systemctl is-active postgresqlHA
then
echo "PostgreSQL is active in HA mode"
# add here any pre-backup command specific to HA mode
else
echo "PostgreSQL backup FAILURE: PostgreSQL is not running." >&2
# add any commands to send a backup failure alert here if necessary
exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...
Обратите внимание, что systemctl status <service...>
предназначен в основном для интерактивного использования; для сценариев более удобными могут быть systemctl is-active <service...>
или systemctl is-failed <service>
. Если вы перечислите несколько сервисов, команды вернут код результата 0, если хотя бы один сервис удовлетворяет условию.
Если вам не нужно заботиться о том, какая версия службы запущена, вы даже можете протестировать их одновременно:
...
if ! systemctl is-active postgresql postgresqlHA
then
echo "PostgreSQL backup FAILURE: neither clustered or non-clustered service is running." >&2
exit 69 # EX_UNAVAILABLE
fi
# commands to run the backup here
...
Это эквивалент полной опции --output-error=warn-nopipe
. Дополнительные пояснения приведены в списке MODE.
Поведение по умолчанию, по-видимому, такое, когда tee имеет несколько выходов, может быть, когда stdout ведет к каналу, или где побочный вывод осуществляется через подстановку процесса с помощью >( command )
, тогда, если какой-либо считыватель любого канала дает сбой, tee завершает работу. -p
заставляет продолжить работу с другими выходами.
Это просто мое прочтение справочной страницы Linux Mint. :Я ничего из этого не тестировал.