Bash, Systemd Service, подстановка команд - не очень хорошо играют вместе - PullRequest
0 голосов
/ 10 сентября 2018

В моем файле redis@.service есть следующее:

...
ExecStop=/bin/bash -c \"/usr/local/bin/redis-cli -p $(echo %i | awk -F \'.\' \'{ print $2 }\') shutdown\"
...

Затем, когда я запускаю:

sudo systemctl stop redis@redis.6379.test-site.com.service

Затем:

sudo systemctl status redis@redis.6379.test-site.com.service

Iget:

...
Process: 10042 ExecStop=/bin/bash -c "/usr/local/bin/redis-cli -p $(echo redis.6379.test-site.com | awk -F '.' '{ print $2 }') shutdown" (code=exited, status=1/FAILURE)
...
Sep 10 17:36:53 hostname bash[10042]: -p: -c: line 0: unexpected EOF while looking for matching `"'
Sep 10 17:36:53 hostname bash[10042]: -p: -c: line 1: syntax error: unexpected end of file

Затем, если я запускаю:

sudo systemctl start redis@redis.6379.test-site.com.service

Затем следует (взято из вывода systemctl status):

/bin/bash -c "/usr/local/bin/redis-cli -p $(echo redis.6379.test-site.com | awk -F '.' '{ print $2 }') shutdown"

Тогда команда работаеткак и ожидалось ...

Может кто-нибудь пролить свет на то, что здесь происходит?

Если Systemd просто запускает команду, показанную для ExecStop, и эта команда прекрасно работает при запуске вручнуюразве это не должно работать, когда systemd запускает его?

У меня такое чувство, что это связано с цитированием, но я слишком много новичка в bash, чтобы обернуть вокруг него голову.

...