启动nginx报错Failed to start nginx.service: Unit is not loaded properly: Bad message

1.报错分析

使用创建服务脚本:

vi /usr/lib/systemd/system/nginx.service
systemctl daemon-reload
systemctl start nginx.service

报错是因为我的配置文件:
/usr/lib/systemd/system/nginx.service没有被按正确格式编写导致。改好之后重新加载就可以了.
具体问题分析一下。

通过报错日志看第2行、第8行、第9行报错。主要是我在编写nginx.service文件时,把第2行的单词“Description”写成“Descri ption”了,第8行的单词“ExecStartPre”写成“ExecstartPre”,还有第9行的ExecStartPre的“-t -c ”后面的内容“/usr/local/nginx/conf/nginx.conf”不能换行。

2.正确的nginx.service内容

[Unit]
Description=nginx - web server
After=network.targt

[Service]
Type=forking
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/usr/local/nginx/sbin/nginx -s quit
PrivateTmp=true

[Install]
WantedBy=multi-user.target

修改完脚本后执行命令:

systemctl daemon-reload
systemctl start nginx.service
systemctl status nginx.service

执行成功后查看运行状态:

最后设置开机自启:

systemctl enable nginx.service

参考地址:

https://www.cnblogs.com/pengsay/p/16206920.html

Failed to start nginx.service: Unit is not loaded properly: Bad message-优快云博客

[root@Docker-register ~]# systemctl list-units --type=service --state=running UNIT LOAD ACTIVE SUB DESCRIPTION auditd.service loaded active running Security Auditing Service chronyd.service loaded active running NTP client/server couchbase-server.service loaded active running Couchbase Server crond.service loaded active running Command Scheduler dbus.service loaded active running D-Bus System Message Bus docker.service loaded active running Docker Application Container Engine getty@tty1.service loaded active running Getty on tty1 gssproxy.service loaded active running GSSAPI Proxy Daemon irqbalance.service loaded active running irqbalance daemon lvm2-lvmetad.service loaded active running LVM2 metadata daemon metricbeat.service loaded active running Metricbeat is a lightweight shipper for metrics. NetworkManager.service loaded active running Network Manager polkit.service loaded active running Authorization Manager postfix.service loaded active running Postfix Mail Transport Agent rhnsd.service loaded active running LSB: Starts the Spacewalk Daemon rhsmcertd.service loaded active running Enable periodic update of entitlement certificates. rpcbind.service loaded active running RPC bind service rsyslog.service loaded active running System Logging Service sshd.service loaded active running OpenSSH server daemon systemd-journald.service loaded active running Journal Service systemd-logind.service loaded active running Login Service systemd-udevd.service loaded active running udev Kernel Device Manager tuned.service loaded active running Dynamic System Tuning Daemon vgauthd.service loaded active running VGAuth Service for open-vm-tools vmtoolsd.service loaded active running Service for virtual machines hosted on VMware zabbix-agent.service loaded active running Zabbix Agent LOAD = Reflects whether the unit definition was properly loaded. ACTIVE = The high-level unit activation state, i.e. generalization of SUB. SUB = The low-level unit activation state, values depend on unit type. 26 loaded units listed. Pass --all to see loaded but inactive units, too. To show all installed unit files use 'systemctl list-unit-files'.
03-18
<think>首先,用户的问题是:解决启动 Nginx 报错 "failed to start nginx.server.service: unit nginx.server.service not found"。用户意图是解决启动 Nginx 服务时遇到的这个错误。 从系统级指令中,我需要: - 所有行内数学表达式使用 $...$ 格式。 - 独立公式使用 $$...$$ 格式并单独成段。 - LaTeX 语法正确。 - 使用中文回答。 - 生成相关问题。 - 回答中引用的段落末尾自然地添加引用标识。 - 回答结构清晰,帮助用户逐步解决问题,保证真实可靠。 参考站内引用: - 引用[1]: 关于 Nginx 的配置信息,包括路径、文件位置等。 - 引用[2]: 错误示例,关于 PHP-FPM 启动失败的错误。 - 引用[3]: Kubernetes 相关错误,启动 Controller-manager 的问题。 - 引用[4]: Kubernetes DNS 配置问题。 这些引用中,引用[1] 最相关,因为它涉及 Nginx 的配置路径。引用[2][3][4] 是关于其他服务的错误,可能不直接相关,但可以作为类似问题的参考。用户问题明确是关于 Nginx启动错误。 用户的问题:"failed to start nginx.server.service: unit nginx.server.service not found"。这个错误表明系统找不到名为 "nginx.server.service" 的服务单元。在 Linux 系统中,服务通常由 systemd 管理,服务单元文件以 .service 结尾。 常见原因: 1. 服务单元文件不存在或路径错误。 2. 服务单元文件名错误。 3. 服务未安装或安装不正确。 4. systemd 未加载服务单元。 从引用[1] 中,有 Nginx 的配置信息: - nginx binary file: "/home/nginx/sbin/nginx" - nginx configuration file: "/home/nginx/conf/nginx.conf" - nginx pid file: "/home/nginx/logs/nginx.pid" - 等等。 这表明 Nginx 可能安装在自定义路径 "/home/nginx",而不是默认路径(如 /usr/local/nginx 或 /etc/nginx)。在 systemd 服务单元中,路径需要正确指向这些位置。 标准 Nginx 服务单元文件通常名为 "nginx.service",而不是 "nginx.server.service"。用户错误中指定了 "nginx.server.service",这可能是个拼写错误或自定义名称。 解决步骤: 1. 检查服务单元文件是否存在。 2. 确保服务单元文件在正确位置。 3. 重新加载 systemd。 4. 启动正确的服务名。 在回答中,我需要结构化: - 解释错误原因。 - 提供逐步解决方案。 - 确保可靠性:基于标准 Linux 系统管理知识。 - 使用中文。 - 生成相关问题。 生成相关问题:基于用户问题,相关问题可能包括: 1. 如何正确安装 Nginx 服务? 2. 如何创建自定义 systemd 服务单元? 3. Nginx 启动失败的其他常见原因? 最后,添加引用标识:在回答中,如果引用站内内容,自然添加 [^1] 等。但用户提供的引用中,只有引用[1] 直接相关,所以我应该在提到 Nginx 配置路径时引用它。 回答大纲: 1. 介绍错误:解释错误含义。 2. 原因分析:为什么会出现这个错误。 3. 解决方案步骤: a. 检查服务单元文件。 b. 创建或修复服务单元文件。 c. 重新加载 systemd。 d. 启动服务。 4. 验证:如何测试 Nginx 是否运行。 5. 生成相关问题。</think>### 解决 Nginx 启动报错 "failed to start nginx.server.service: unit nginx.server.service not found" 这个错误通常发生在 Linux 系统中使用 `systemd` 管理服务时,表明系统找不到名为 `nginx.server.service` 的服务单元文件。根本原因是服务单元文件(`.service` 文件)缺失、路径错误或名称不匹配。根据您的引用信息(如 Nginx 自定义安装路径 `/home/nginx` [^1]),服务单元文件可能未正确配置或加载。下面我将逐步解释原因并提供解决方案,确保操作安全可靠。 #### 错误原因分析 - **服务单元文件不存在**:`systemd` 要求服务单元文件(如 `nginx.service`)必须存在于特定目录(如 `/etc/systemd/system/` 或 `/usr/lib/systemd/system/`)。您的错误中指定了 `nginx.server.service`,但标准 Nginx 安装通常使用 `nginx.service`,文件名差异会导致系统无法识别。 - **安装路径不匹配**:从引用[1] 可知,Nginx 可能安装在自定义路径 `/home/nginx`,而非默认路径(如 `/usr/share/nginx`)。如果服务单元文件未正确指向该路径,`systemd` 无法启动服务。 - **服务未加载**:即使文件存在,如果未通过 `systemctl daemon-reload` 重新加载,`systemd` 不会识别新服务。 - 其他可能性:权限问题或 Nginx 未完全安装(类似引用[2] 中 PHP-FPM 的 UID 错误)。 #### 逐步解决方案 按照以下步骤操作(适用于大多数 Linux 发行版,如 CentOS、Ubuntu): 1. **检查服务单元文件是否存在** 首先验证服务单元文件是否在标准位置。运行以下命令: ```bash # 检查标准路径 ls /etc/systemd/system/nginx.service /usr/lib/systemd/system/nginx.service # 检查自定义路径(基于引用[1]) ls /home/nginx/conf/nginx.service # 可能位于配置目录 ``` - 如果文件存在,但名称是 `nginx.service`(而非 `nginx.server.service`),说明服务名拼写错误。 - 如果文件不存在,需创建或重新安装服务单元文件。 2. **创建或修复服务单元文件** - **情况1:服务单元文件缺失** 创建文件 `/etc/systemd/system/nginx.service`(使用 root 权限): ```bash sudo nano /etc/systemd/system/nginx.service ``` 粘贴以下内容(根据引用[1] 中的路径自定义): ```ini [Unit] Description=Nginx HTTP Server After=network.target [Service] Type=forking PIDFile=/home/nginx/logs/nginx.pid # 引用[1] 中的 PID 路径 ExecStart=/home/nginx/sbin/nginx -c /home/nginx/conf/nginx.conf # 二进制和配置文件路径 ExecReload=/home/nginx/sbin/nginx -s reload ExecStop=/home/nginx/sbin/nginx -s quit PrivateTmp=true [Install] WantedBy=multi-user.target ``` 保存文件(按 `Ctrl+O` 后 `Enter`,再 `Ctrl+X` 退出)。 - **情况2:服务名错误** 如果文件已存在但名称不符,重命名文件: ```bash sudo mv /etc/systemd/system/nginx.server.service /etc/systemd/system/nginx.service # 修正名称 ``` 3. **重新加载 systemd 并启动服务** 更新 `systemd` 配置并启动服务: ```bash # 重新加载服务单元 sudo systemctl daemon-reload # 启动正确服务名(使用 nginx.service) sudo systemctl start nginx.service # 设置开机自启 sudo systemctl enable nginx.service ``` 4. **验证 Nginx 状态** 检查服务是否运行: ```bash sudo systemctl status nginx.service ``` - 正常输出应显示 `active (running)`。 - 如果仍有错误,检查日志: ```bash tail -f /home/nginx/logs/error.log # 引用[1] 中的错误日志路径 ``` #### 常见问题排查 - **权限问题**:确保 Nginx 路径权限正确(如运行 `sudo chown -R root:root /home/nginx`)。 - **自定义路径冲突**:如果 Nginx 通过源码编译安装(如引用[1]),但未生成服务文件,需手动创建步骤 2 的文件。 - **安装不完整**:如果步骤 1 中文件完全缺失,重新安装 Nginx 并确保包含 systemd 支持(如 Ubuntu 下 `sudo apt install nginx` 自动创建服务单元)。 #### 相关问题 1. 如何为自定义安装的软件(如 Nginx)创建 systemd 服务单元文件? 2. Nginx 启动失败的其他常见错误(如端口冲突或配置文件错误)如何解决? 3. 在 Kubernetes 环境中部署 Nginx 时,如何避免类似引用[4] 的 DNS 配置问题?
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值