У меня есть эта строчка в файле /var/lib/pgsql/data/postgresql.conf
:
# archive_command = '' # command to use to archive a logfile segment
нам нужно раскомментировать archive_command
параметр и установите его значение на
'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
так что ожидаемые результаты будут
archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
Как это сделать с помощью однострочного лайнера sed или perl?
другой вариант просто добавьте строку:
archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
после строки:
#archive_command = ''
Ты можешь использовать sed
как вы можете видеть в ответе @Khaled, но лучший способ сделать это - использовать инструмент управления конфигурацией, например: ansible
, chef
, puppet
...
Я бы использовал шаблон, который полностью управляется системой управления конфигурацией, вместо того, чтобы выполнять поиск и замену. Я бы использовал поиск и замену только в том случае, если я ожидаю, что файл будет изменен другим менеджером конфигурации или другим пользователем.
Проблема с большинством скриптов в том, что они не предназначены для идемпотентности. Если вам нужно снова изменить этот параметр, вам нужно изменить скрипт. Вы могли бы написать sed
выражение быть идемпотентным, но это требует немного больше усилий.
Вы можете использовать следующую команду, чтобы заменить строку, содержащую закомментированную команду archive_command:
sed -e "s|# archive_command = .*|archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'|" /var/lib/pgsql/data/postgresql.conf
Можете добавить -i
возможность обновления на месте.