首页 > 解决方案 > 如何从 systemd 配置文件中的函数输出设置 ExecStart?

问题描述

systemd在目录中创建了一个服务文件以作为服务/lib/systemd/system/启动。nodejs问题是该文件包含字段的硬编码路径nodejExecStart这意味着每当我更新时,nodejs我都必须手动更改此服务文件。有没有办法使用which node下面文件中的命令来自动设置路径?

[Unit]
Description=node-server-1
After=network.target

[Service]
Environment=NODE_PORT=3001
Type=simple
User=manid
ExecStart=/home/manidos/.nvm/versions/node/v14.15.1/bin/node /home/manidos/node-nginx/index.js
Restart=on-failure

[Install]
WantedBy=multi-user.target

标签: linuxbashubuntusystemd

解决方案


您可以在该行中运行一个简单的 bash 脚本ExecStart

ExecStart=/bin/bash -c '$$(/usr/bin/which node) /home/manidos/node-nginx/index.js'

基本上,这是which在子外壳中运行命令并将其标准输出传递给外部脚本运行。如systemd.service 手册页中所述,在 systemd 单元文件中使用此特定语法需要双美元。


推荐阅读