代码之家  ›  专栏  ›  技术社区  ›  manidos

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

  •  0
  • manidos  · 技术社区  · 4 年前

    我创造了一个 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
    
    0 回复  |  直到 4 年前
        1
  •  2
  •   dschurman    4 年前

    您可以在 ExecStart 线路:

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

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

    推荐文章