nginx.service: не Может открыть файл PID/run/nginx

Я нахожусь на Ubuntu 18.10, работающей под VMware и не могущий запустить nginx сервис - я получаю ошибку "nginx.service: не Может открыть файл PID/run/nginx".

Я скомпилировал nginx из источника с помощью пассажира. Это пошло хорошо на одной машине, но попытка его в моем vm я не могу запустить nginx сервис. Это дает вышеупомянутую ошибку, поскольку это не может открыть файл PID (или создать его?). Я сделал systemctl, включают и запускаются, и он зависает.

Я использовал/etc/sytemd/system/nginx.service сценарий следующим образом:

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/run/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Я попытался заменить/var/run выполненный/, и он дает ту же ошибку.

Нет никакой ссылки на PID в nginx.conf (и я не думаю там потребности быть?).

Кто-либо мог дать мне какие-либо подсказки по тому, как диагностировать или зафиксировать это?

0
задан 27 January 2019 в 09:33

3 ответа

У меня есть ответ в смысле того, как зафиксировать это, но я оставлю его открытым некоторое время, таким образом, кто-то сможет прокомментировать, ПОЧЕМУ это так.

Я изменил строку PID, таким образом, файл PID был записан в папку журнала установленной nginx папки (/opt/nginx/logs). Anwhere еще и это ОТКАЗАЛОСЬ бы писать файл PID!!!

[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/opt/nginx/logs/nginx.pid
ExecStartPre=/opt/nginx/sbin/nginx -t
ExecStart=/opt/nginx/sbin/nginx
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

Я понятия не имею, что причина этого поведения, и было бы замечательно, если бы некоторая Ubuntu, которую эксперт Linux мог бы сказать мне, почему это не записало бы PID больше нигде, включая нормальное местоположение выполнения / выполненный и/var/run (или даже tmp), например, как нормально во всех заключенных в кавычки сценариях запуска для программы. Я думаю, что это только происходит, когда это создается из источника.

0
ответ дан 26 October 2019 в 11:04

/ выполняется доступный? Можете Вы CD в выполненный / и касаться файла?

cd /run && touch hello.txt && ls -lash

Если не, который, вероятно, означает, что Вы хотите, чтобы nginx поместил файл PID в местоположение, которое не доступно. Можно сделать 2 вещи;

  1. Фигура, почему выполненный / не доступен (вероятно, tmpfs конфигурация)
  2. Поместите файл PID где-то в другом месте, например,/tmp
0
ответ дан 26 October 2019 в 11:04

Только что наткнулся на ваш вопрос и решил оставить краткий ответ:

Systemd НЕ создает файлы PID самостоятельно. Он ожидает, что исполняемые файлы создадут его (обычно внутри /run,или специально для Ubuntu в папке /var/run). Systemd только проверяет, был ли он создан после запуска службы. Он также удаляет файл PID при завершении службы. Ссылка

Сервер Nginx в качестве процесса разветвления поддерживает создание файла PID. Чтобы изменить его местоположение, вы можете использовать директиву pid в его файле nginx.conf, который вы можете найти в папке /etc/nginx для стандартного упаковка. Эта директива pid по умолчанию имеет значение logs/nginx.pid. Ссылка

При ручном создании службы Nginx необходимо убедиться, что оба местоположения находятся в файле Systemd nginx.service и в конфигурации Nginx nginx.conf. файл совпадает.

5
ответ дан 11 February 2020 в 06:35

Другие вопросы по тегам:

Похожие вопросы: