[systemd-devel] [systemd-nspawn] nginx: [emerg] open() "/dev/stderr" failed (6: No such device or address)

Mantas Mikulėnas grawity at gmail.com
Fri Apr 24 07:33:12 PDT 2015


On Fri, Apr 24, 2015 at 4:53 PM, Lennart Poettering
<lennart at poettering.net> wrote:
> On Fri, 24.04.15 16:51, Mantas Mikulėnas (grawity at gmail.com) wrote:
>
>> On Fri, Apr 24, 2015 at 4:24 PM, Lennart Poettering
>> <lennart at poettering.net> wrote:
>> > On Fri, 24.04.15 12:06, Peter Paule (systemd-devel at fedux.org) wrote:
>> >
>> >> Hi,
>> >>
>> >> I run nginx in a CentOS 7.0 container via systemd-nspawn. nginx logs to
>> >> stderr/stdout via configuration to capture logs via journald.
>> >>
>> >> nginx.conf
>> >>
>> >>   error_log  /dev/stderr warn;
>> >>
>> >>
>> >> If I use systemd 219-1 (-1 is the package number of Arch Linux) which seems
>> >> to be a non-patched systemd 219, everything is fine. If I upgrade to systemd
>> >> 219-6, nginx cannot be started via systemd-nspawn. systemd 219-6 includes
>> >> this patch "https://projects.archlinux.org/svntogit/packages.git/tree/repos/core-x86_64/0001-nspawn-when-connected-to-pipes-for-stdin-stdout-pass.patch?h=packages/systemd".
>> >> BTW: I see the same error if I use systemd-git-HEAD.
>> >>
>> >> I see the following errors in journal - I tried bot "stderr" and "stdout".
>> >>
>> >>   Apr 24 04:48:12 server systemd-nspawn[421]: nginx: [emerg] open()
>> >> "/dev/stdout" failed (6: No such device or address)
>> >>   Apr 24 04:48:45 server systemd-nspawn[496]: nginx: [emerg] open()
>> >> "/dev/stderr" failed (6: No such device or address)
>> >
>> > Any idea what the precise syscall is that triggers that? i.e. what
>> > strace says?
>>
>> It kind of makes sense when stdout is a socket, since
>> open(/dev/stdout) or open(/proc/self/fd/*) doesn't just dup that fd,
>> it tries to open the file anew (including permission checks and
>> everything). A bit annoying.
>
> Well, but it's not a socket here, is it? Peter?

Hmm, I'm pretty sure the default StandardOutput=journal means stdout
will be a socket connection to journald, doesn't it?

(And since it's a process-specific thing, "echo "asdf" > /dev/stdout"
from an interactive shell will merely test the shell's stdout (which
is a tty), not nginx's stdout...)

-- 
Mantas Mikulėnas <grawity at gmail.com>


More information about the systemd-devel mailing list