1 ubuntu node.js npm systemctl
我有以下服务文件:
[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
Run Code Online (Sandbox Code Playgroud)
这是来自 /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'.
Run Code Online (Sandbox Code Playgroud)
我一生都无法弄清楚为什么它抱怨找不到文件。npm start 从同一工作目录工作得很好,没有问题。我是否缺少一些权限或+x或其他什么地方?
Pho*_*elf 12
由于可执行文件在没有环境的情况下运行,因此可能会发生此错误。
您可以通过创建 Bash 脚本来完成您需要的一切来解决此问题。
脚本文件
#! /bin/bash
source ${HOME}/.bashrc
cd /absolute/path/to/my/project
export NODE_ENV=development
npm start
Run Code Online (Sandbox Code Playgroud)
现在将其模式更改为可执行
chmod +x script.sh
Run Code Online (Sandbox Code Playgroud)
现在我们可以创建我们的服务(例如位于/etc/systemd/system/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
Run Code Online (Sandbox Code Playgroud)
现在让我们运行它并启用它
[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
Run Code Online (Sandbox Code Playgroud)
最近发生在我身上,由于某种原因 systemctl 无法有效地获取.bashrc错误,npm error does not exists这是一个帮助我解决问题的解决方法。
将script.sh文件的内容更改为以下内容
systemctl start my-project
systemctl enable my-project
Run Code Online (Sandbox Code Playgroud)
现在你的 npm 服务应该可以工作了。
该解决方案经过测试:
| 归档时间: |
|
| 查看次数: |
12905 次 |
| 最近记录: |