我有以下服务文件:
[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某处?
答案 0 :(得分:0)
这个错误可能是由于可执行文件是在没有环境的情况下运行的。
您可以通过创建 Bash 脚本来完成您需要的一切来解决这个问题。
<块引用>script.sh
#! /bin/bash
source ${HOME}/.bashrc
cd /absolute/path/to/my/project
export NODE_ENV=development
npm start
现在将其模式更改为可执行
chmod +x script.sh
现在我们可以创建我们的服务
<块引用>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 20.04 LTS 上进行了测试,通过 NVM(节点版本管理器)安装了节点版本 14.16.0