Sim, é possível implementar isso.
Uma maneira simples seria usar um script de shell que chamaria snapper
repetidamente, uma vez para cada configuração. Um loop for
seria suficiente para fazer isso, parece.
Você pode até fazer isso inline no arquivo de unidade do systemd:
ExecStart=/bin/sh -e -c '. /etc/conf.d/snapper; for conf in $$SNAPPER_CONFIGS; do /usr/bin/snapper --config "$$conf" --cleanup-algorithm number --description "boot"; done'
Note que você precisa escapar do $
s, de modo que o systemd não tente interpretá-las como variáveis systemd e, em vez disso, permite que o shell as interprete. (Na minha opinião, usar um shell script externo que você chama em ExecStart=
é uma abordagem mais limpa, então você não precisa lidar com o escape e não precisa empacotar tudo em uma única linha.)
Outra opção seria modificar o próprio snapper
para que ele pudesse lidar com isso nativamente. Digamos que ele leia esse arquivo de configuração e manipule essas configurações sempre que for chamado sem nenhum argumento --config
. Essa seria uma abordagem ainda mais limpa.
Se é aconselhável ou não ... eu acho que depende. Se você obtiver essa unidade snapper-boot.sevice
de um pacote da sua distribuição, poderá ter problemas sempre que houver uma atualização de pacote que possa tocar nesse arquivo. Então, de certa forma, depende da sua situação particular.
Se este arquivo de unidade for enviado com um pacote da sua distribuição Linux, você pode querer considerar abrir um relatório de erro para eles, pedindo que eles evitem codificar nomes de configuração no arquivo de unidade.
Se não for propriedade da sua distribuição, considere armazená-la em /etc/systemd/system
, pois o /usr/lib
é normalmente reservado para arquivos enviados e gerenciados pela distribuição Linux.