Рейтинг:0

nginx: unrecognized service after upgrading Nginx on Ubuntu 18.04

флаг eg

I removed the default Nginx package from my server, and compiled it from source here. There is a script on the server that checks Nginx, and reports any problem:

if ($result->num_rows > 0) {
    exec('sudo service nginx configtest 2>&1', $output, $returnCode);
    if ($returnCode === 0) {
        passthru('sudo service nginx restart');
    } else {
        $subject = 'Nginx config test failed on ' .gethostname();
        $message = implode('<br>', $output);
        Mail::sendEmail('it_staff@mydomain.com', $subject, $message);
    }
}

When running service nginx configtest I get:

nginx: unrecognized service

However, running nginx -t returns:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Am I missing a configuration somewhere that I'm unaware of? Nginx is working, but it's saying it's an unrecognized service.

I created a systemd unit file with the following:

[Unit]
Description=nginx - high performance web server
Documentation=https://nginx.org/en/docs/
After=network-online.target remote-fs.target nss-lookup.target
Wants=network-online.target

[Service]
Type=forking
PIDFile=/var/run/nginx.pid
ExecStartPre=/usr/sbin/nginx -t -c /etc/nginx/nginx.conf
ExecStart=/usr/sbin/nginx -c /etc/nginx/nginx.conf
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s TERM $MAINPID

[Install]
WantedBy=multi-user.target

I also enabled and started Nginx:

sudo systemctl enable nginx.service
sudo systemctl start nginx.service

Nginx is running, and I can hit web sites using this server. What could I be missing? Thanks.

Рейтинг:1
флаг ru

Старый оказание услуг вызов есть для «устаревших» программ, но нгинкс является модулем SystemD, а не устаревшей службой SysVInit/Upstart.

сервис nginx конфигтест (обычно считается) «устаревшим» в пользу прямого судо nginx-t команды для проверки конфигурации в настоящее время, и вы всегда должны работать с судо nginx-t в качестве отправной точки для тестирования конфигурации. Полагаться только на оказание услуг / systemctl для остановки, запуска и перезагрузки службы. Не полагайтесь на него больше для параметров 'configtest'.

(В IRC-чате nginx на Freenode теперь LiberaChat мы всегда призывали людей использовать судо nginx-t для их тестов конфигурации и судо nginx-T чтобы сбросить свои конфигурации в полностью читаемой форме для отладки, так что это «стандарт», которым я пользуюсь, поскольку форумы nginx также используют эту нотацию чаще, чем вызовы службы.)

DevOpsSauce avatar
флаг eg
Спасибо. Похоже, мне придется сделать фиксацию кода, чтобы изменить синтаксис этой проверки. Простое исправление. :)
DevOpsSauce avatar
флаг eg
Вопрос: Где я могу найти в документации, что `configtest` больше не работает? Кажется, я не могу найти его нигде, даже когда пытаюсь искать в самой документации Nginx.
флаг ru
@DevOpsSauce это просто общие сведения о мире nginx. Это не задокументировано в документации nginx. Но в целом `service nginx...` — это устаревший механизм SysVInit/Upstart, который не транслируется напрямую в мир SystemD nginx. Обычно предполагается, что для NGINX запуск `sudo nginx -t` является способом запуска теста конфигурации, потому что он полностью независим от системы инициализации, что означает, что он работает во всех дистрибутивах и системах инициализации, которые все еще существуют.
DevOpsSauce avatar
флаг eg
Большое спасибо за объяснение.
флаг ru
Пожалуйста, я добавил некоторые разъяснения по этому поводу, а также в свой ответ о том, почему он обычно считается «устаревшим» в пользу независимого от системы инициализации способа запуска тех же тестов.

Ответить или комментировать

Большинство людей не понимают, что склонность к познанию нового открывает путь к обучению и улучшает межличностные связи. В исследованиях Элисон, например, хотя люди могли точно вспомнить, сколько вопросов было задано в их разговорах, они не чувствовали интуитивно связи между вопросами и симпатиями. В четырех исследованиях, в которых участники сами участвовали в разговорах или читали стенограммы чужих разговоров, люди, как правило, не осознавали, что задаваемый вопрос повлияет — или повлиял — на уровень дружбы между собеседниками.