【问题标题】:How to set ExecStart from function output in systemd config file?如何从 systemd 配置文件中的函数输出设置 ExecStart?
【发布时间】:2020-12-01 08:39:21
【问题描述】:

我在目录/lib/systemd/system/ 中创建了一个systemd 服务文件来启动nodejs 作为服务。问题是该文件在ExecStart 字段中包含nodej 的硬编码路径。这意味着每当我更新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

【问题讨论】:

  • 编写你自己的脚本,使用哪个节点和节点在其中启动命令,然后在 systemd 服务文件中引用它。
  • 你应该创建一个指向当前版本的链接并引用它:ln -s /home/manidos/.nvm/versions/node/v14.15.1 /home/manidos/.nvm/versions/node /当前

标签: linux bash ubuntu systemd


【解决方案1】:

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

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

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

【讨论】:

    猜你喜欢
    • 2023-03-14
    • 2019-11-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-21
    • 2016-08-25
    • 1970-01-01
    相关资源
    最近更新 更多