Как я могу получить $(logname) внутри команды systemd exec?

У меня была такая же Timeout when reading response headers from daemon processпроблема. Основной файл журнала Apache (, а не тот, что для этого VirtualHost ), показал эту ошибку:

Unable to change working directory to '/home/ffsync'.
Failure to configure the daemon process correctly and process left in unspecified state. Restarting daemon process after delay.

Оказалось, что домашний каталог для ffsyncне существует. Изменение его на /opt/mozilla-firefox-sync-server/решило проблему для меня. Возможно, это поможет и вам!

0
01.04.2020, 14:59
1 ответ

Systemd работает на более низком уровне, чем ваша оболочка. Под этим я подразумеваю, что когда вы выполняете команду, это обычно дочерний процесс вашей среды оболочки, который в данном случае является дочерним процессом вашего демона инициализации (systemd ). Это означает, что модули systemd не видят и не подчиняются ни вашей среде оболочки, ни макросам оболочки, таким как ~. Любые переменные среды, настроенные в таких файлах, как ~/.profileили ~/.bashrc, не применяются. Чтобы увидеть, что относится к , вы можете ввести команду systemctl show-environment. В моих системах (Ubuntu Server и Arch )это PATHи LANG. Подробнее здесь .

Все это верно (более или менее )и для пользовательских юнитов... но systemd поддерживает немного более надежную среду для пользовательских юнитов, как вы должны видеть с systemctl show-environment --user. Если вы запустили эту последнюю команду, она должна была выдать то, что вам нужно сделать. Systemd (в моих системах по крайней мере )устанавливает переменную окружения USERна имя пользователя, от имени которого выполняется модуль. Поэтому измените строку ExecStart на /home/${USER}/folder/script.sh. Это должно сработать. Также обратите внимание, что я не использовал (и )... согласно справочным страницам systemd, в этом нет необходимости. Фигурные скобки({и})нужны на тот случай, если по какой-то очень странной причине в ваших именах пользователей есть пробелы. Вы также можете использовать ${HOME}/folder/script.sh, который будет работать, даже если домашний каталог пользователя находится где-то кроме /home/.

0
19.03.2021, 02:30

Теги

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