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

systemd服务执行npm run start失败,但手动运行正常的问题

问题

我的Node.js服务通过systemd启动时报错,但手动运行正常,具体情况如下:

systemd服务文件

[Unit]
Description=Nodejs Server

[Service]
WorkingDirectory=/home/projects
ExecStart=npm run start
Restart=always

[Install]
WantedBy=multi-user.target
After=multi-user.target

报错信息

SyntaxError: Unexpected token '.'
 at wrapSafe (internal/modules/cjs/loader.js:915:16)
 at Module._compile (internal/modules/cjs/loader.js:963:27)
 at Object.Module._extensions..js (internal/modules/cjs/loader.js)
 at Module.load (internal/modules/cjs/loader.js:863:32)
 at Function.Module._load (internal/modules/cjs/loader.js:708:14)
 at Module.require (internal/modules/cjs/loader.js:887:19)
 at require (internal/modules/cjs/helpers.js:74:18)
 at Object.<anonymous> (/home/projects/node_modules/web3-core/lib/extend.js:24:14)
 at Module._compile (internal/modules/cjs/loader.js:999:30)
 at Object.Module._extensions..js (internal/modules/cjs/loader.js:1027:10)
[nodemon] app crashed - waiting for file changes before starting...

背景情况

项目此前正常运行数月,添加web3依赖后出现该问题。手动进入项目目录执行npm run start完全正常,用tmux临时运行也没问题。当前Node.js版本为v18,已尝试升级Node.js、删除重装node_modules、卸载重装web3包、重启服务器,问题仍未解决。


解决方案

问题核心是systemd服务的环境变量与手动登录时的环境不一致,导致依赖解析、Node.js版本匹配出现异常。

1. 指定Node.js和npm的绝对路径

先手动执行which node和which npm获取绝对路径(比如/usr/local/bin/node、/usr/local/bin/npm),修改服务文件的ExecStart:

ExecStart=/usr/local/bin/npm run start

或者直接用node执行项目入口文件:

ExecStart=/usr/local/bin/node /home/projects/index.js

2. 继承用户环境变量

在Service段添加用户和环境配置,让服务使用和你手动登录时相同的环境:

[Service]
User=你的登录用户名
WorkingDirectory=/home/projects
Environment="PATH=/usr/local/bin:/usr/bin:/bin"
ExecStart=/usr/local/bin/npm run start
Restart=always

3. 检查web3版本兼容性

部分旧版web3可能不兼容Node.js v18的语法,尝试安装兼容版本:

npm install web3@^4.0.0

4. 排查环境差异

临时修改服务文件输出环境变量,对比手动运行的环境:

ExecStart=/bin/bash -c "env > /home/projects/service-env.log && npm run start"

启动服务后查看service-env.log,和手动执行env的输出对比,定位差异点。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 00:13:26