Когда я указываю работу direcotry в файле единицы, я хотел бы обратиться к нему от раздела ExecStart через спецификатор т.е.
[Unit]
Description=A test daemon that says hello
[Service]
Type=oneshot
WorkingDirectory=/home/foo/scipts
ExecStart="%<<WORKING_DIRECTORY_SPECIFIER>>/echo_hello.sh"
RemainAfterExit=yes
Действительно ли это возможно с Systemd и если это не, там какие-либо обходные решения?
Нет, можно использовать ~
или абсолютный путь к каталогу. Осторожный, хотя: ~
вероятно, укажет на /root/
как дом пользователя единицы.
и сам WorkingDirectory понимает спецификаторы, но это не пользователь, конкретный за исключением
"%g" User group
"%G" User GID
"%u" User name
"%U" User UID
но это склонно принимать значение по умолчанию к пользовательскому корню.
Вам не нужно специально указывать рабочий каталог в ExecStart
, так как все команды будут запускаться так, как если бы вы его уже указали. В этом суть.
НЕЛЬЗЯ использовать ~
, так как при этом будет использоваться $HOME
пользователя $USER
, под которым запущена служба. Вместо этого используйте относительные пути.
Если ваш WorkingDirectory
указывает на /home/foo/scripts/
, вам просто нужно использовать ExecStart=./somescript.sh
Если у вас есть подкаталоги, это то же самое - ExecStart=subdir1/subdir2/somescript.sh
.
WorkingDirectory
в основном представляет собой cd
для служб.