我正在使用 systemd 服务来保持我的 NodeJS 包运行。
[Unit]
Description=MyNodePackage
After=network.target
[Service]
WorkingDirectory= /home/me/.config/MyNodePackage
ExecStartPre=+/bin/mkdir -p /home/me/.config/MyNodePackage
ExecStartPre=+/bin/chown me:me /home/me/.config/MyNodePackage
ExecStartPre=+/usr/bin/npm install --global --allow-root --unsafe-perm my-node-package
ExecStart= /usr/bin/npx my-node-package
Environment=NODE_ENV=production "NODE_OPTIONS=--max_old_space_size=4000"
User=me
Group=me
Restart=on-failure
RestartSec=60s
TimeoutStartSec=5m
PrivateTmp=true
[Install]
WantedBy=multi-user.target
我想放入一个这样的服务文件并启动它:
sudo service myNodePackage start
- 但启动失败,因为
/home/me/.config/MyNodePackage
尚不存在。 - 如果我使用
WorkingDirectory=-
而不是WorkingDirectory=
,它确实可以正常启动,但由于存在性检查失败,工作目录根本没有设置,因此在process.cwd()
我的 Node 环境中不可用。(仅限于第一次启动服务) - 我不想确保
/home/me/.config/MyNodePackage
服务文件之外的存在,以使其保持自我管理。但是,是的,简单地这样做mkdir -p /home/me/.config/MyNodePackage && sudo service myNodePackage start
将是一个解决方案。有没有办法WorkingDirectory=
在之后ExecStartPre=
而不是之前进行操作?我的意思是,我只需要为我的设置正确的工作目录ExecStart=
,而不是为我的 3 个ExecStartPre=
调用中的任何一个设置正确的工作目录。