установить переменную окружения из скрипта sh в служебном файле systemd

Я согласен с комментариями выше относительно использования sudoвместо входа в систему как root. Тем не менее, вот вариант чего-то из /etc/bash/bashrcна моем Gentoo box, который, я думаю, делает то, что вы хотите:

if [[ "$(id -u)" == "0" ]] ; then
    PS1+='\[\033[01;31m\]\h\[\033[01;36m\] \w \$\[\033[00m\] '
else
    PS1+='\[\033[01;32m\]\u@\h\[\033[01;36m\] \w \$\[\033[00m\] '
fi

В зависимости от того, где вы его поместите, может потребоваться изменить PS1+=на PS1=.

1
11.06.2020, 13:15
1 ответ

Если вы хотите, чтобы переменные, определенные в файле сценария, были доступны для родительской среды, в которой выполняется этот сценарий, вам необходимо создать источник сценария, а не выполнять его. Измените строку ExecStartна:

ExecStart=/bin/sh -c '. /home/ec2-user/myserver/config/myserverVars.sh ;/home/ec2-user/venv/bin/python  /home/ec2-user/myserver/myserver.py >> /home/ec2-user/myserver/logs/systemd_myserver.log 2>&1 ' 

См. В чем разница между поиском ('.' или «источник» )и выполнение файла в bash? для получения подробной информации о разнице между поиском и выполнением скрипта.

Также обратите внимание, что я изменил порядок перенаправлений. Чтобы получить и stderr, и stdout в один и тот же файл, вам нужно > file 2>&1, а не 2>&1 > file.

1
18.03.2021, 23:28

Теги

Похожие вопросы