Nginx已安装运行但命令找不到、systemctl无对应服务如何重启
问题说明
当前运行的Nginx为源码编译安装版本,部署路径为/usr/local/nginx-1.20.2/,未注册systemd服务单元,因此执行systemctl status nginx会提示服务不存在,属于正常现象。
重启方案
方案1:平滑重启(推荐,无业务中断)
平滑重启不会断开正在处理的用户请求,是生产环境优先选择的方式:
- 先校验Nginx配置文件合法性,避免配置错误导致重启失败,执行命令:
执行后返回/usr/local/nginx-1.20.2/sbin/nginx -t -c /usr/local/nginx-1.20.2/conf/nginx.confsyntax is ok、test is successful即代表配置无问题。 - 校验通过后发送重载信号完成重启,执行命令:
/usr/local/nginx-1.20.2/sbin/nginx -s reload -c /usr/local/nginx-1.20.2/conf/nginx.conf
方案2:硬重启(会中断业务,仅平滑重启失效时使用)
硬重启会先终止Nginx进程再重新启动,会中断正在处理的请求:
- 停止现有Nginx进程,执行命令:
/usr/local/nginx-1.20.2/sbin/nginx -s stop - 进程完全退出后重新启动Nginx,执行命令:
/usr/local/nginx-1.20.2/sbin/nginx -c /usr/local/nginx-1.20.2/conf/nginx.conf
如果执行stop命令无响应,也可以直接终止master进程(你查询到的master进程PID为31334,注意不要加-9参数强杀,避免worker进程残留):
kill 31334
等进程退出后再执行上述启动命令即可。
可选优化:配置systemd服务实现统一管理
如果后续需要使用systemctl命令统一管理Nginx,可以手动创建systemd服务单元,操作步骤如下:
- 创建服务配置文件,执行命令:
vi /etc/systemd/system/nginx.service - 在文件中写入以下配置内容:
[Unit] Description=Nginx Web Server After=network.target [Service] Type=forking PIDFile=/usr/local/nginx-1.20.2/logs/nginx.pid ExecStartPre=/usr/local/nginx-1.20.2/sbin/nginx -t ExecStart=/usr/local/nginx-1.20.2/sbin/nginx -c /usr/local/nginx-1.20.2/conf/nginx.conf ExecReload=/usr/local/nginx-1.20.2/sbin/nginx -s reload ExecStop=/usr/local/nginx-1.20.2/sbin/nginx -s stop PrivateTmp=true [Install] WantedBy=multi-user.target - 保存退出后,重载systemd配置使服务生效,执行命令:
systemctl daemon-reload
配置完成后就可以直接使用systemctl start/stop/restart/status nginx管理服务,执行systemctl enable nginx还可以设置Nginx开机自启。
内容的提问来源于stack exchange,提问作者lolololhahahahaha
相关产品推荐
相关产品推荐

