systemd em 15.04 não registrará stdout da unidade

11

Atualmente, estou tentando criar uma unidade systemd como um servidor da web. Atualmente, meu arquivo foo.service é o seguinte:

[Unit]
Description=The Foo Web Server

[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo

[Install]
WantedBy=multi-user.target

O executável foo registra automaticamente todas as solicitações HTTP para stdout - isso é bem testado. No entanto, quando vejo os logs com journalctl -u foo , só recebo a saída assim:

...
May 06 17:46:57 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:46:57 localhost systemd[1]: Started Foo Web Server.
May 06 17:46:57 localhost systemd[1]: Starting The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Stopping The Foo Web Server...
May 06 17:47:08 localhost systemd[1]: Started The Foo Web Server.
May 06 17:47:08 localhost systemd[1]: Starting The Foo Web Server...

Alguém poderia explicar por que não está registrando todos os outputs do stdout? Eu olhei brevemente para esta pergunta anterior , mas isso não ajuda - no entanto, aludiu a algo ao longo das linhas de "... pode não funcionar para sistemas que não usam full systemd" - seria este o caso para o Ubuntu 15.04? Obrigado antecipadamente, qualquer ajuda com isso seria muito apreciada!

    
por Athan Clark 06.05.2015 / 20:02

2 respostas

5

Na verdade, o armazenamento em buffer no UNIX depende do contexto: quando o stdout é redirecionado para algo interativo como um console - geralmente é um buffer de linha, caso contrário, ele é totalmente armazenado em buffer.

O buffer pode ser alterado dentro do aplicativo usando setvbuf chamada de biblioteca.

Mas também pode ser feito com o comando stdbuf no lançamento:

ExecStart=/usr/bin/stdbuf -oL /opt/foo/.cabal-sandbox/bin/foo

(para o caso de buffer de linha)

    
por Velkan 11.05.2015 / 14:36
0

Por padrão no Ubuntu 15.04 , os diários systemd são apenas voláteis e mantidos em /run/systemd/journal e são perdidos a cada reinicialização. Para usar o diário persistente systemd , você precisa criar o diretório /var/log/journal (e reiniciar o systemd-journald.service).

Portanto, pode ser que stdout output seja redirecionada para syslog e não seja mantida no diário systemd . Para isso, você pode precisar usar um diário persistente systemd como explicado acima.

Você verificou /var/log/syslog para seu foo log?

    
por solsTiCe 11.05.2015 / 15:32