LINUX.ORG.RU
решено ФорумAdmin

nginx.service: Can't open PID file /run/nginx.pid (yet?) after start: Bad file descriptor

 ,


0

1

Archlinux, после старта nginx появляется такая ошибка в логе.

May 08 15:10:55 alpine systemd[1]: Starting A high performance web server and a reverse proxy server...
May 08 15:10:56 alpine systemd[1]: nginx.service: Can't open PID file /run/nginx.pid (yet?) after start: Bad file descriptor
May 08 15:10:56 alpine systemd[1]: Started A high performance web server and a reverse proxy server.

systemd юнит:

# systemctl cat nginx
# /usr/lib/systemd/system/nginx.service
[Unit]
Description=A high performance web server and a reverse proxy server
After=network.target network-online.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
PrivateDevices=yes
SyslogLevel=err

ExecStart=/usr/bin/nginx -g 'pid /run/nginx.pid; error_log stderr;'
ExecReload=/usr/bin/nginx -s reload
KillMode=mixed

[Install]
WantedBy=multi-user.target

В nginx.conf ничего, относящегося к делу нет.

Файл /run/nginx.pid создаётся, pid в нём присутствует.

Почитал man open, пишут, что

EBADF
(openat()) pathname is relative but dirfd is neither AT_FDCWD nor a valid file descriptor.

и совсем запутался. В исходниках systemd не осилил понять, что происходит, тут и тут если кому интересно.

Версия systemd 253.4-1-arch.

Так в принципе оно вроде работает, но это же неправильно.

/run это tmpfs, никаких симлинков вроде нигде не задействовано.

Перемещено hobbit из general

★★★★★

Последнее исправление: vbr (всего исправлений: 1)
20 мая 2024 г.
Ответ на: комментарий от vbr

Обновил nginx c 1.18 до 1.26 и столкнулся с проблемой (nginx.service: Can’t open PID file /run/nginx.pid (yet?) after start: Operation not permitted)

Ваше решение решило проблему. Правда допысал тут: /lib/systemd/system/nginx.service [Service] Type=forking #PIDFile=/var/run/nginx.pid PIDFile=/run/nginx.pid

ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf ExecReload=/bin/sh -c «/bin/kill -s HUP $(/bin/cat /var/run/nginx.pid)» ExecStop=/bin/sh -c «/bin/kill -s TERM $(/bin/cat /var/run/nginx.pid)» ExecStartPost=/bin/sleep 1 [Install] WantedBy=multi-user.target

shinta111
()