用于从单独目录运行的实例的 systemd 单元模板

用于从单独目录运行的实例的 systemd 单元模板

我正在尝试创建一个新的 systemd 单元模板文件,该文件将用于启动服务器程序的多个实例,每个实例都运行在不同的目录中。即,我需要根据实例而不同的 ExecStart 参数。

我尝试将实例的路径设为如下所示的实例名称。我有以下单元文件:/etc/systemd/system/[email protected]

[Unit]
Description=server instance '%I'
Requires=...
Wants=...

[Service]
Type=simple
ExecStart=%I/bin/server.sh
PIDFile=%I/server.pid

[Install]
WantedBy=multi-user.target

我执行守护进程重新加载:

$ sudo systemctl daemon-reload

我尝试使用以下命令启动一个实例:

$ sudo systemctl start myserver@/path/to/instance1.service

我收到一条错误消息,提示查看状态以了解详细信息。因此,我这样做:

$ sudo systemctl status myserver@/path/to/instance1.service

我看到一个错误,表明 ExecStart 路径不是绝对的:

May 17 16:04:46 myhost systemd[1]: [/etc/systemd/system/[email protected]:9] \
  Executable path is not absolute, ignoring: %I/bin/server.sh
May 17 16:04:46 myhost systemd[1]: [email protected] lacks \
  both ExecStart= and ExecStop= setting. Refusing.

有没有办法参数化 ExecStart 二进制文件(和 PIDFile)的路径?我是否必须为每个实例创建一个单独的单元文件?

相关内容