我在/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'
其他选项只是添加行:
archive_command = 'rsync -a %p barman@barman-backup-server-ip:/var/lib/barman/main-db-server/incoming/%f'
后行:
#archive_command = ''
您可以使用类似下面的命令来replace包含注释的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选项进行就地更新。
你可以像在@Khaled答案中看到的那样使用sed ,但是最好的方法是使用像ansible , chef , puppet这样的configurationpipe理工具。
我将使用由configurationpipe理完全pipe理的模板,而不是执行search和replace。 我只会使用search和replace,只要我希望文件被另一个configurationpipe理或其他用户更改。
大多数脚本的问题在于它们不是被devise为幂等的。 如果您需要再次更改该参数,则需要更改脚本。 你可以写sed expresion是幂等的,但是这需要更多的努力。