O iniciante pode lidar com links simbólicos para arquivos de configuração?

30

Eu tenho todos os meus arquivos de configuração iniciais sob controle de versão. Minha maneira ideal de usar o upstart é criar links flexíveis do meu repositório de controle de versão (mercurial - não que isso importe) no / etc / init, mas o upstart não consegue ver os trabalhos. Está tudo bem se eu copiar os arquivos do diretório do repositório para / etc / init.

Alguém sabe por que o iniciante falha ao lidar com links simbólicos ou mesmo físicos?

obrigado

Chris

Chris McCauley
fonte
11
Talvez tenha sido uma decisão de design da parte dos desenvolvedores do Upstart ignorar os soft links? De qualquer forma, se o seu repositório estiver na mesma partição que /etc/init, tente usar links físicos.
Steven segunda-feira
Tentou hard links e que não quer trabalhar :-(
Chris McCauley
Coxo. De fato, os links simbólicos são ignorados sem uma chamada manual para recarregar a configuração. Suspiro. Eu prefiro links simbólicos. Limpador no meu caso de uso. Ah bem. Vou copiar os arquivos, como idiota.
James T Snell

Respostas:

9

O Upstart não suporta links simbólicos, pois eles podem apontar para um arquivo em uma partição que não é carregada no momento da inicialização .

Eu resolvi isso em meu próprio projeto, colocando os arquivos conf em / etc / init / myscripts e vinculando-os a um diretório no meu repositório. mount --bind /etc/init/myscripts ~/code/repo/initscripts.

Adicione isso ao / etc / fstab e a ligação será persistente:

/etc/init/myscripts  /home/me/code/repo/initscripts      none    bind

Isso efetivamente fornece diretórios vinculados. O Upstart tratará os arquivos conf como qualquer outro, porque eles são locais para / etc / init. Seu DVCS também os verá como arquivos locais no repositório, portanto, também os tratará como faria com outros arquivos armazenados lá. Melhor dos dois mundos.

Alexander Garden
fonte
49

O Upstart observa seus diretórios de configuração com inotify e recarrega a configuração quando qualquer um dos arquivos é alterado ou quando um novo arquivo é adicionado. Aparentemente, isso não funciona para links simbólicos.

Para atualizar manualmente a configuração, use

$ initctl reload-configuration
Fabian Jakobs
fonte
isso costumava funcionar de forma confiável para mim. ultimamente no iniciante 1.3, ele funciona apenas em trabalhos que estão parados.
jcomeau_ictx
2
Para mim, os links simbólicos em / etc / init / work, mas se eu alterar o arquivo por trás do link simbólico, o arquivo não será relido pelas ferramentas iniciantes. Levei horas para descobrir que o link simbólico é o motivo. Ele age como um cache que ninguém quer ter.
peschü
1

Como mencionado anteriormente:

initctl reload-configuration

No entanto, se você receber um erro como o seguinte:

initctl: Rejected send message, 1 matched rules; type="method_call", sender=":1.155" (uid=1000 pid=6177 comm="initctl reload-configuration ") interface="com.ubuntu.Upstart0_6" member="ReloadConfiguration" error name="(unset)" requested_reply="0" destination="com.ubuntu.Upstart" (uid=0 pid=1 comm="/sbin/init")

Você deve invocar o sudo:

sudo initctl reload-configuration
Karl Morrison
fonte