[systemd-devel] How to guarantee the stdout buffer between systemd and journald is flushed when program quits?
Ivan Kurnosov
zerkms at zerkms.ru
Thu May 17 21:02:08 UTC 2018
Hi,
I originally asked this question on the stackoverflow (
https://stackoverflow.com/q/50400145/251311) but I feel I wouldn't get an
answer there.
The simplified example that demonstrates a problem is
#include <stdio.h>
int main(void)
{
printf("foo\n");
fflush(stdout);
getchar();
return 0;
}
(it's not programming language specific though - the original application I
discovered the problem with is in Go).
If it's compiled and is run by the following unit:
[Unit]
Description=description
After=network.target
[Service]
ExecStart=/path/to/binary
[Install]
WantedBy=multi-user.target
then on `systemctl restart` `journald` would in most cases not get the
`foo\n` output, while `syslog` successfully writes it down to the
`/var/log/syslog`.
Here is the example of the `journald` output for the service:
May 18 08:30:38 hostname systemd[1]: Stopped servicename
May 18 08:30:38 hostname systemd[1]: Started servicename
May 18 08:30:38 hostname systemd[1]: Stopped servicename
May 18 08:30:38 hostname systemd[1]: Started servicename
May 18 08:30:38 hostname servicename[7701]: foo
May 18 08:30:41 hostname systemd[1]: Stopped servicename
May 18 08:30:41 hostname systemd[1]: Started servicename
May 18 08:30:46 hostname systemd[1]: Stopped servicename
May 18 08:30:46 hostname systemd[1]: Started servicename
and then the corresponding part of the `/var/log/syslog`:
May 18 08:30:38 hostname systemd[1]: Stopped servicename.
May 18 08:30:38 hostname systemd[1]: Started servicename.
May 18 08:30:38 hostname servicename[7682]: foo
May 18 08:30:38 hostname systemd[1]: Stopped servicename.
May 18 08:30:38 hostname systemd[1]: Started servicename.
May 18 08:30:38 hostname servicename[7701]: foo
May 18 08:30:41 hostname systemd[1]: Stopped servicename.
May 18 08:30:41 hostname systemd[1]: Started servicename.
May 18 08:30:41 hostname servicename[7720]: foo
May 18 08:30:46 hostname systemd[1]: Stopped servicename.
May 18 08:30:46 hostname systemd[1]: Started servicename.
May 18 08:30:46 hostname servicename[7739]: foo
What would be a way to **guarantee** journald received the `stdout`, if any?
--
With best regards, Ivan Kurnosov
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/systemd-devel/attachments/20180518/83270ae7/attachment.html>
More information about the systemd-devel
mailing list