我从服务器中删除了默认的 Nginx 包,并从源代码编译它这里服务器上有一个脚本可以检查 Nginx,并报告任何问题:
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('[email protected]', $subject, $message);
}
}
运行时service nginx configtest
我得到:
nginx: unrecognized service
然而,跑步的nginx -t
回报是:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
我是否在某个我不知道的地方遗漏了配置?Nginx 正在运行,但它说它是一个unrecognized service
。
我创建了一个 systemd 单元文件,内容如下:
[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
我还启用并启动了 Nginx:
sudo systemctl enable nginx.service
sudo systemctl start nginx.service
Nginx 正在运行,我可以使用此服务器访问网站。我可能遗漏了什么?谢谢。
答案1
旧service
有的调用适用于“遗留”程序,但它nginx
是一个 SystemD 单元,而不是遗留的 SysVInit/Upstart 服务。
service nginx configtest
如今,它(通常被认为)已被“弃用”,取而代之的是直接sudo nginx -t
使用命令来测试配置,您应该始终将其sudo nginx -t
作为配置测试的首选。仅依靠service
/systemctl
来停止、启动和重新加载服务。不要再依赖它来执行“configtest”参数。
(在 Freenode 现为 LiberaChat 上的 nginx IRC 聊天中,我们始终鼓励人们使用sudo nginx -t
它来进行配置测试,并将sudo nginx -T
他们的配置以完全可读的形式转储以进行调试,所以这是我遵循的“标准”,因为 nginx 论坛也比服务调用更多地使用这种符号。)