You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Linux EC2使用systemd运行Node应用时报错npm command not found问询

问题原因
  • systemd运行服务时默认不会加载普通用户的shell配置文件(如~/.bashrc、~/.bash_profile),仅使用系统默认的PATH环境变量,你手动在终端执行命令时会加载用户级配置,因此能正常找到npm命令。
  • 你当前的systemd服务未指定运行用户,默认以root身份执行,而Node.js和npm大概率是在ec2-user用户下安装的,root用户的环境变量中没有对应npm的执行路径。
  • 你的启动脚本存在路径错误:cd home/ec2-user/source/NodeApp/是相对路径写法,执行时会从服务的默认工作目录查找目标路径,大概率会切换目录失败,也会影响后续命令执行。
解决方案

步骤1:获取npm的绝对路径

登录ec2-user用户,在终端执行以下命令拿到npm的绝对路径,记下来后续替换使用:

which npm

示例输出为/home/ec2-user/.nvm/versions/node/v15.6.0/bin/npm,对应的npm所在目录就是/home/ec2-user/.nvm/versions/node/v15.6.0/bin。

步骤2:修改systemd服务配置

编辑NodeApp.service文件,补充用户、环境变量、工作目录配置:

[Unit]
Description=Node app

[Service]
# 指定运行用户为安装了Node的ec2-user
User=ec2-user
Group=ec2-user
# 替换为你上一步拿到的npm所在目录,加到PATH最前面
Environment="PATH=/home/ec2-user/.nvm/versions/node/v15.6.0/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
# 指定应用工作目录,无需在脚本中额外cd
WorkingDirectory=/home/ec2-user/source/NodeApp
ExecStart=/home/ec2-user/source/NodeApp/start.sh
# 可选配置:应用崩溃后自动重启
Restart=always
RestartSec=5

[Install]
WantedBy=multi-user.target

步骤3:修改启动脚本(可选,推荐配置)

为了进一步避免路径问题,可以直接在脚本中使用npm的绝对路径执行:

#!/bin/bash
# 替换为你第一步拿到的npm绝对路径
/home/ec2-user/.nvm/versions/node/v15.6.0/bin/npm start

步骤4:生效配置并重启服务

依次执行以下命令让配置生效:

# 重新加载systemd配置
systemctl daemon-reload
# 重启Node应用服务
systemctl restart NodeApp
# 查看服务运行状态确认正常
systemctl status NodeApp

内容的提问来源于stack exchange,提问作者Christopher Fotos

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 21:06:03