Abordagem totalmente diferente porque só sei que seus olhos estão rolando na última resposta.
Neste, você vai confiar em inotify
, o que significa que é realmente específico para Linux. Você vai virar o problema de cabeça para baixo - os arquivos de configuração individuais ainda estarão lá, mas você irá gerá-los novamente automaticamente cada vez que houver uma mudança no master .
Você tem o seu arquivo de configuração "mestre", digamos master.conf
, que contém todas as suas seções, subseções, etc. Você configura seu script com inotify
para que quando esse script for alterado, ele escreva todos esses arquivos. (Para evitar uma condição de corrida, você pode ter que fazer alguns truques extras, como armazenar os arquivos em um subdiretório e trocar os diretórios para executar seu "commit").
A partir do link , obtemos um script básico em perl:
my $inotify = Linux::Inotify2->new;
$inotify->watch("/etc/master.conf", IN_MODIFY);
while () {
my @events = $inotify->read;
unless (@events > 0){
print "read error: $!";
last ;
}
foreach my $event (@events) {
next unless $event->IN_MODIFY;
# 1. TODO: RE-READ IN THE CONFIG FILE
# (example)
$config_hash = &parse_master_file;
# 2. TODO: RE-GENERATE YOUR CONFIG FILES
# (example)
for $section qw( section1 section2 misc ) {
open(S,"> /etc/${section}.conf")
print S &dump_config($config_hash,$section)
close(S)
}
}
}
Fazer o parse_master_file
e dump_config
dependerá de você. Além disso, provavelmente deve haver uma chamada para dormir no loop principal ou sua CPU vai pegar fogo.