gpt4 book ai didi

node.js - 在 systemctl 服务文件中从 ExecStart 运行 npm start

转载 作者:行者123 更新时间:2023-12-04 18:35:53 37 4
gpt4 key购买 nike

我有以下服务文件:

[Unit]
Description=MyApp
After=syslog.target network.target
StartLimitIntervalSec=0

[Service]
Type=simple
Restart=always
RestartSec=1
WorkingDirectory=/opt/nodejs-sites/MyApp
ExecStart=/usr/bin/npm start
Environment=NODE_ENV=development
User=root
Group=root
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=MyApp

[Install]
WantedBy=multi-user.target
这是来自/var/log/syslog 的错误
Oct 14 13:00:55 devu18 systemd[1]: Started myapp.
Oct 14 13:00:55 devu18 systemd[3203]: myapp.service: Changing to the requested working directory failed: No such file or directory
Oct 14 13:00:55 devu18 systemd[3203]: myapp.service: Failed at step CHDIR spawning /usr/bin/npm: No such file or directory
Oct 14 13:00:55 devu18 systemd[1]: myapp.service: Main process exited, code=exited, status=200/CHDIR
Oct 14 13:00:55 devu18 systemd[1]: myapp.service: Failed with result 'exit-code'.
我一生都无法弄清楚为什么它提示找不到文件。从同一个工作目录开始的 npm 工作正常,没有问题。我是否缺少某些权限或 +x 或某处的东西?

最佳答案

由于可执行文件是在没有环境的情况下运行的,因此可能会发生此错误。
这是一个快速修复食谱
您可以通过创建一个 Bash 脚本来完成您需要的一切来解决这个问题。

script.sh


#! /bin/bash
source ${HOME}/.bashrc

cd /absolute/path/to/my/project
export NODE_ENV=development
npm start
现在将其模式更改为可执行
chmod +x script.sh
现在我们可以创建我们的服务(例如位于 /etc/systemd/system/my-project.service 中)

my-project.service

[Unit]
Description=My Project
After=syslog.target network.target

[Service]
Type=simple
Restart=always
RestartSec=1
ExecStart=/path/to/my/script.sh
User=root

[Install]
WantedBy=multi-user.target
现在让我们运行它并启用它
systemctl start my-project
systemctl enable my-project
故障排除(Ubuntu 18.04 LTS)
这发生在我身上,由于某种原因 systemctl 无法有效地获取 .bashrc给我留下一个错误 npm error does not exists这是一个帮助我的解决方法。
更改 脚本.sh 文件内容如下
#! /bin/bash
export NVM_DIR="$HOME/.nvm"
[ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh"
[ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion"

cd /absolute/path/to/my/project
export NODE_ENV=development
npm start
现在您的 npm 服务应该可以正常工作了。

该解决方案已在以下环境中进行了测试:
  • Ubuntu 20.04 LTS,通过 NVM( Node 版本管理器)安装 Node 版本 14.16.0
  • Ubuntu 18.04 LTS,通过 NVM( Node 版本管理器)安装 Node 版本 12.22.6
  • CentOS 7,通过 NVM( Node 版本管理器)安装 Node 版本 12.22.6
  • 关于node.js - 在 systemctl 服务文件中从 ExecStart 运行 npm start,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64353905/

    37 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com