NodeJS SvelteKit构建(节点适配器)在尝试将其作为Systemd服务启动时输出错误,但在直接启动时工作正常

cyvaqqii  于 2023-03-01  发布在  Node.js
关注(0)|答案(1)|浏览(157)

我试图将我的SvelteKit应用程序部署到Linux服务器,并让它自动启动和自动重启。
当使用node index.js作为root用户直接启动它时,它工作得非常好,但当尝试将它作为systemd服务或crontab启动时,它会将以下错误输出到我的errors.log文件:

SyntaxError: Unexpected token '?'
    at Loader.moduleStrategy (internal/modules/esm/translators.js:133:18)
file:///*path-to-app*/handler.js:768
    const DOMException = globalThis.DOMException ?? (() => {

这是/lib/systemd/system/.中的服务systemctl文件

[Unit]
Description = *description*

[Service]
Type           = simple
User           = root
Group          = root
LimitNOFILE    = 4096
Restart        = always
RestartSec     = 10s
StandardOutput = append:/*path-to-app*/logs.log
StandardError  = append:/*path-to-app*/errors.log
ExecStart      = node /*path-to-app*/index.js

[Install]
WantedBy = multi-user.target

当尝试进行故障排除时,很多回复说这发生在旧的NodeJS版本上,但是在我的服务器上,版本18.14.2是唯一安装的版本。另一个常见的技巧是将"type": "module"添加到我的package.json文件中,我已经这样做了。当用最新的SvelteKit版本和节点适配器构建一个空的框架项目时,也会发生这种情况。有人能告诉我为什么同一个用户的同一个命令会导致不同的结果吗?帮助将不胜感激。
节点版本:18.14.2
操作系统:Ubuntu 22.04.2

des4xlb0

des4xlb01#

reddit上的radavenport 84帮助我找到了答案。运行服务中的哪个节点会显示它在“/usr/bin/node/”中使用了不同的节点版本,该版本肯定是默认安装的。我唯一安装过的版本是通过nvm安装的18.14.2。但在ExecStart中指定18.14.2版本的完整路径解决了我的问题:

ExecStart = /root/.nvm/versions/node/v18.14.2/bin/node /*path-to-app*/index.js

相关问题