Como você configura o log do runit?

5

Estou com problemas para configurar o serviço com o registro correto usando a execução. Aqui está uma breve visão geral dos arquivos e scripts que criei de acordo com a documentação do runit e outros recursos que encontrei na internt:

Estou usando o runit no debian, portanto:

/etc/service/test - > link para /etc/sv/test .

Em "/ etc / sv / test:

$ ls /etc/sv/test
finish  log  run
$ ls /etc/sv/test/log
config  run

Os scripts run e finish são bem simples:

root@data1:/etc/sv/test $ cat /etc/sv/test/run
#!/bin/sh

touch /tmp/pid
echo $$ > /tmp/pid

while true; do
    date
    sleep 3
done
root@data1:/etc/sv/test $ cat /etc/sv/test/finish
#!/bin/sh

kill 'cat /tmp/pid'

E o script log também é muito fácil:

cat / etc / sv / test / log / run

#!/bin/sh
exec svlogd -t /var/log/test

O diretório /var/log/test existe e o serviço é executado.

$ sv s test
run: test: (pid 11547) 536s; down: log: 1s, normally up, want up

Mas o diretório de log está vazio ... O que estou perdendo? Onde estão todas as informações de registro?

atualização:

Também garanti que todos os scripts sejam executáveis.

atualização 2:

Parece que o sv falha ao iniciar o script de registro por algum motivo!

$ sv s test
run: test: (pid 14612) 5s; down: log: 0s, normally up, want up

atualização 3:

Se você quiser parar o script de registro, você deve emitir:

$ sv d test/log
    
por Oz123 05.09.2014 / 10:18

2 respostas

4

Há uma série de coisas para abordar em sua pergunta que não estão relacionadas à pergunta ( cough arquivos pid cough ), mas vamos abordar a questão propriamente dita. / p>

Primeiro , o registro é opcional. Não há nenhum requisito rígido de que você tenha um logger para sua definição de serviço, embora na maioria dos casos você deseje um.

Segundo , porque o criador de logs é defacto para o seu serviço, faz sentido que ./log contenha as configurações necessárias para o registro.

Terceiro , quando você desativa o serviço, o registrador fica em execução por um motivo - ele está lá para capturar os dados restantes até que o serviço termine. Isso foi feito para evitar a perda de dados de registro, não apenas quando o serviço é desativado, mas também se o serviço falhar. É normal que o logger ainda seja executado mesmo quando o serviço está inativo. Ao iniciar o serviço, basta reconectar a nova instância de serviço ao logger existente.

Quarto , você está correto, você pode parar o registrador explicitamente nomeando-o com o comando sv . Isso está de acordo com o paradigma daemontools existente.

Quinto , a menos que você tenha necessidades incomuns para registrar a falha do programa svlogd (altamente improvável), você não precisa se preocupar em eliminá-lo, etc. o processo de supervisão runsv para finalizá-lo, não são necessários PIDs ou kill de comandos.

Se você tiver outras dúvidas, recomendamos entrar em contato com a lista de e-mails de supervisão , que é de baixo ruído e tem muitas pessoas bem informadas para responder suas perguntas. Um espelho somente para leitura também pode ser encontrado em mail-archive.org .

    
por 07.02.2015 / 00:58
3

Então, depois de algumas tentativas e erros, encontrei uma solução.

As seguintes coisas são importantes para perceber:

  1. Arquivo de configuração : note que é bastante intuitivo. Se você tiver um serviço monitorado em /etc/sv/test e um diretório de log em /etc/sv/test/log , você esperaria que config estivesse em /etc/sv/test/log/config ! Mas observe, o arquivo é lido de onde você executa svlogd . Isso significa: Se o seu script de log for executado em /var/log/test (o último argumento para svlogd ), este é o local onde a configuração arquivo é esperado. Então, escreva sua configuração em var/log/test/config item da lista
  2. Recarregando a configuração : Se você alterar o arquivo de configuração, poderá parar e iniciar o script com:
$ sv down test/log
$ sv start test/log
ok: run: test/log: (pid 21190) 0s
    
por 05.09.2014 / 12:02

Tags