linux - 如何从 systemd 配置文件中的函数输出设置 ExecStart?

标签 linux bash ubuntu systemd

我创建了一个 systemd目录 /lib/systemd/system/ 中的服务文件发射nodejs作为一项服务。问题是该文件包含到 nodej 的硬编码路径。在 ExecStart field 。这意味着任何时候我更新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

最佳答案

您可以在 ExecStart 中运行一个简单的 bash 脚本。线:ExecStart=/bin/bash -c '$$(/usr/bin/which node) /home/manidos/node-nginx/index.js'基本上,这是运行 which子shell中的命令并传递其标准输出以由外部脚本运行。在 systemd 单元文件中使用这种特殊语法需要双美元,如 systemd.service manpage 中所述。 .

关于linux - 如何从 systemd 配置文件中的函数输出设置 ExecStart?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65087137/

相关文章:

bash - "event not found"试图用 !0 导出字符串

android - Windows 7 中 Ubuntu VM 中 Android 模拟器中的黑屏

c - 如何在单个CPU的多个CPU核心而不是多个CPU上设置亲和性?

linux - 如何访问 virtualbox 中的共享文件夹。主机 Win7, guest Fedora 16?

javascript - 用于对数据进行分组的正则表达式

linux - 禁止访问文件夹

linux - bash 脚本上的奇怪错误

bash - 如何从函数内部确定函数名称

java - 文件名 openjdk-8-jdk-headless 有问题吗?

ubuntu - 在 OpenLDAP 中启用未经身份验证的绑定(bind)