背景:
每次启动NACOS服务,都需要进到目录,然后执行启动脚本,关闭也是,查看服务需要ps,服务器重启后,还的手动起服务,管理起来比较麻烦。之前已经将es,logstash,已经通过服务管理起来了,的确方便很多。

思路:
1. 创建 systemd 服务文件
2. 编辑服务文件内容
3. 创建专用用户(可选但推荐)
4. 重载 systemd 并启动服务
5. 验证服务
操作:
1. 创建 systemd 服务文件
在 /etc/systemd/system/ 目录下创建一个服务文件,例如 nacos.service。
bash
sudo vim /etc/systemd/system/nacos.service
2. 编辑服务文件内容
将以下内容粘贴到文件中。请注意修改 User、Group、ExecStart 和 Environment 中的路径,使其与你的实际安装路径和用户匹配。
bash
[Unit]
Description=Nacos Server
After=network.target
[Service]
Type=forking
# 设置执行 Nacos 的用户和组(建议不要使用 root 运行)
User=root
Group=root
# 设置环境变量,指向 JDK 安装目录
#Environment="JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk"
# 如果你的 Nacos 单机模式,添加此变量;集群模式则不需要或移除
#Environment="MODE=standalone"
# Nacos 的启动脚本路径
ExecStart=/usr/local/nacos/bin/startup.sh
ExecStop=//usr/local/nacos/bin/shutdown.sh
ExecReload=/bin/kill -s HUP $MAINPID
KillMode=process
Restart=on-failure
RestartSec=300s
[Install]
WantedBy=multi-user.target
关键配置说明:
- User/Group : 为了安全起见,建议创建一个专门的
nacos用户来运行服务。 - JAVA_HOME: 必须显式指定,因为 systemd 环境下默认可能无法读取用户 profile 中的环境变量。
- ExecStart : 指向
startup.sh脚本。加上-m standalone是为了强制单机模式启动(如果配置文件里没改的话)。如果是集群模式,请去掉该参数。 - ExecStop : 指向
shutdown.sh脚本。 
3. 创建专用用户(可选但推荐)
如果你还没有 nacos 用户,建议创建一个:
bash
# 创建用户(不允许登录)
sudo useradd -r -s /bin/false nacos
# 将 Nacos 目录的所有权赋予该用户
sudo chown -R nacos:nacos /opt/nacos
4. 重载 systemd 并启动服务
完成上述配置后,执行以下命令:
bash
# 1. 重新加载 systemd 配置,使其识别新服务
sudo systemctl daemon-reload
# 2. 设置 Nacos 开机自启
sudo systemctl enable nacos
# 3. 启动 Nacos 服务
sudo systemctl start nacos
# 4. 查看 Nacos 服务状态
sudo systemctl status nacos
# 5. 取消开机自启
sudo systemctl disable nacos


5. 验证服务
执行 status 命令后,你应该看到类似 Active: active (running) 的绿色字样。如果启动失败,可以使用以下命令查看详细日志:
bash
# 查看 systemd 日志
journalctl -u nacos -f
# 或者查看 Nacos 自身的日志(默认位置在 nacos 目录下的 logs/start.log)
tail -f /usr/local/nacos/logs/start.out

常见问题排查
-
JAVA_HOME not found :
如果报错提示找不到 JAVA_HOME,请确保在
nacos.service文件中正确配置了Environment="JAVA_HOME=...",并且路径指向正确的 JDK 目录。 -
Permission denied :
确保
nacos用户对 Nacos 的安装目录(尤其是bin/*.sh和logs/目录)有执行和写入权限。 -
服务启动后立刻退出 :
这通常是因为 Nacos 启动脚本
startup.sh在后台运行后,systemd 认为进程退出了。- 确保服务文件中设置了
Type=forking。 - 检查 Nacos 的
logs/start.out看是否有 Java 报错(如内存不足、端口被占用)。
- 确保服务文件中设置了
-
-bash: ./shutdown.sh: /bin/bash^M: bad interpreter: No such file or directory
这是一个非常经典的错误,通常发生在 Windows 系统上编辑过脚本文件,然后上传到 Linux 系统运行 时。
错误原因
Windows 和 Linux 对"换行符"的定义不同:
- Windows : 使用
CRLF(即\r\n)。 - Linux : 使用
LF(即\n)。
错误提示中的 ^M 实际上就是 Windows 的 \r 字符。Linux 的解释器(/bin/bash)把 \r 当作了文件名的一部分,因此找不到 /bin/bash^M 这个文件,导致报错。
解决方法
你需要将脚本的格式转换为 Unix 格式
bash
sed -i 's/\r$//' shutdown.sh
sed -i 's/\r$//' startup.sh

通过以上步骤,就可以像管理其他系统服务(如 Nginx, MySQL)一样,使用 systemctl start nacos、systemctl stop nacos 和 systemctl restart nacos 来管理 Nacos 了。