Как гарантировать, что буфер stdout между systemd и journald очищается при выходе из программы? - PullRequest
0 голосов
/ 17 мая 2018

Упрощенный пример, демонстрирующий проблему:

#include <stdio.h>

int main(void)
{
    printf("foo\n");
    fflush(stdout);
    getchar();
    return 0;
}

(хотя это не зависит от языка программирования - исходное приложение, с которым я обнаружил проблему, находится в Go).

Если оно скомпилированои запускается следующим модулем:

[Unit]
Description=description
After=network.target

[Service]
ExecStart=/path/to/binary

[Install]
WantedBy=multi-user.target

, затем на systemctl restart journald в большинстве случаев не получит вывод foo\n, в то время как syslog успешно записывает его в /var/log/syslog.

Вот пример вывода journald для службы:

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

, а затем соответствующая часть /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

Каким будет способ гарантии journald, полученной stdout, если таковая имеется?

1 Ответ

0 голосов
/ 18 мая 2018

tldr, это известная проблема.

Я задал тот же вопрос в systemd-devel maillist и получил ответ со ссылкой на сообщенную проблему .

...