linux - 如何从 systemd 配置文件中的函数输出设置 ExecStart?
问题描述
我systemd
在目录中创建了一个服务文件以作为服务/lib/systemd/system/
启动。nodejs
问题是该文件包含字段的硬编码路径nodej
。ExecStart
这意味着每当我更新时,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
解决方案
您可以在该行中运行一个简单的 bash 脚本ExecStart
:
ExecStart=/bin/bash -c '$$(/usr/bin/which node) /home/manidos/node-nginx/index.js'
基本上,这是which
在子外壳中运行命令并将其标准输出传递给外部脚本运行。如systemd.service 手册页中所述,在 systemd 单元文件中使用此特定语法需要双美元。
推荐阅读
- google-sheets - 如何扫描列并根据某个项目的出现显示结果?
- cmd - Runas savecred 在每次登录后重置
- python - 告诉,寻找方法
- python - pyplot图例的Facecolor不显示
- python - 为什么我无法读取文件的第一行?
- vba - 当 Form_B 在 Form_A 上正确显示模态时,如何防止在 MS Access Form_A 中单击按钮
- xamarin.forms - Xamarin Forms MapRenderer OnMapReady 事件等效于 iOS?
- python - 如何从json修复'\ n'?
- c# - 正则表达式应该只匹配两种类型的带引号的字符串之一
- node.js - Node.Js 从 POST 请求中获取数据