Есть ли способ использовать подстановочные знаки, перенаправление или другой синтаксис оболочки с единицами systemd?

У меня есть файл systemd для запуска файла JAR. Но я хочу выполнить файл JAR как *.jar, Есть ли способ сделать это?

[Unit]
Description=Test Background

[Service]
ExecStart=/usr/bin/java -jar /var/www/test.com/*.jar
Type=simple
WorkingDirectory=/var/www/test.com

[Install]
WantedBy=multi-user.target

Я пытался это, но не работает.

1 ответ

Решение

От man 5 systemd.service (раздел "Командные линии"):

This syntax is inspired by shell syntax, but only the meta-characters and expansions
described in the following paragraphs are understood, and the expansion of variables is
different. Specifically, redirection using "<", "<<", ">", and ">>", pipes using "|",
running programs in the background using "&", and other elements of shell syntax are not
supported.

А также:

Note that shell command lines are not directly supported. If shell command lines are to be
used, they need to be passed explicitly to a shell implementation of some kind. Example:

   ExecStart=/bin/sh -c 'dmesg | tac'

Подстановочные знаки не упоминаются как поддерживаемые, поэтому вам придется заключить эту команду в /bin/sh -c или же /bin/bash -c как в приведенном выше примере.

Другие вопросы по тегам