如何确保 systemd 服务文件中 WorkingDirectory 路径的存在?

如何确保 systemd 服务文件中 WorkingDirectory 路径的存在?

我正在使用 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=调用中的任何一个设置正确的工作目录。

相关内容