Actualmente estoy tratando de hacer una unidad systemd como servidor web. Actualmente, mi foo.servicearchivo tiene el siguiente aspecto:
[Unit]
Description=The Foo Web Server
[Service]
Type=simple
ExecStart=/opt/foo/.cabal-sandbox/bin/foo
[Install]
WantedBy=multi-user.target
El fooejecutable registra automáticamente todas las solicitudes HTTP en stdout, esto está bien probado. Sin embargo, cuando veo los registros con journalctl -u foo, solo obtengo resultados como este:
...
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...
¿Alguien podría explicar por qué no está registrando toda la salida estándar? Miré brevemente esta pregunta anterior , pero no ayuda, sin embargo, aludió a algo como "... puede que no funcione para sistemas que no usan systemd completo ", ¿sería este el caso de Ubuntu 15.04? ? Gracias de antemano, cualquier ayuda con esto sería muy apreciada.

print('Hello World!', flush=True)eso y funcionó! La salida comenzó a aparecer en journalctl.Respuestas:
De hecho, el almacenamiento en búfer en UNIX depende del contexto: cuando stdout se redirige a algo interactivo como una consola, generalmente se almacena en línea, de lo contrario, está completamente protegido.
El almacenamiento en búfer se puede cambiar dentro de la aplicación mediante la llamada a la biblioteca setvbuf .
Pero también se puede hacer con el comando stdbuf en el lanzamiento:
(para caso de línea de búfer)
fuente
ExecStart=/my/foo/programeso, por qué el registro stdout no se vacía cuando se termina el servicio, sino que desaparece por completo.De manera predeterminada en Ubuntu 15.04 , los diarios de systemd solo son volátiles y se mantienen
/run/systemd/journaly se pierden en cada reinicio. Para usar el diario systemd persistente , debe crear el/var/log/journaldirectorio (y reiniciar systemd-journald.service).Por lo tanto, es posible que la
stdoutsalida se redirijasyslogy no se mantenga en systemd journal. Para eso, es posible que deba usar un diario de systemd persistente como se explicó anteriormente.¿Has verificado
/var/log/syslogtufooregistro?fuente
/var/log/journalcomo mencionaste, pero de todos modos no estoy viendo stdout de mi servicio systemd. en el/var/log/syslogtampoco lo veo.