我从我的服务器中删除了默认的 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 正在运行,我可以使用此服务器访问网站。我会错过什么?谢谢。
旧的
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 论坛以来的“标准”也比服务调用更多地使用这种表示法。)