У меня есть сценарий, который работает от имени пользователя root, и я пытаюсь настроить его для пользовательской службы для запуска демона IPFS. Проблема в том, что мне нужно включить службу как пользователь, а не как root. Обычно это работает после перезагрузки, но я хотел бы избежать этого, если смогу.
Сценарий службы находится по адресу ~/.config/systemd/user/ipfs.service.
Это содержит:
[Ед. изм]
Описание=демон IPFS
[Оказание услуг]
# Environment="IPFS_PATH=/data/ipfs" # необязательный путь к каталогу инициализации ipfs, если он не указан по умолчанию (\$HOME/.ipfs)
ExecStart=/usr/local/bin/ipfs демон
Перезапуск = при сбое
[Установить]
WantedBy=default.target
(Я взял этот код отсюда: https://github.com/ipfs/go-ipfs/tree/master/misc )
Если я запускаю эту команду как пользователь, она работает правильно:
systemctl --user включить ipfs
systemctl --user запускает ipfs
Проблема в том, что мой скрипт работает от имени пользователя root, и я не могу понять, как заставить его работать от имени пользователя. Я пробовал это до сих пор:
# Включить задержку, чтобы IPFS могла работать при загрузке
loginctl включить-задерживать $USER_ACCOUNT
# Разрешить запуск службы при загрузке
sudo -u $USER_ACCOUNT systemctl --user включить ipfs
# Запустить службу сейчас
sudo -u $USER_ACCOUNT systemctl --пользователь запускает ipfs
К сожалению, при этом служба не запускается, и когда я получаю это сообщение об ошибке:
Не удалось подключиться к шине: $DBUS_SESSION_BUS_ADDRESS и $XDG_RUNTIME_DIR не определены (рассмотрите возможность использования [email protected] --user для подключения к шине другого пользователя)
После завершения сценария и перезагрузки служба запускается нормально, но я бы хотел, чтобы пользователю не приходилось перезагружаться, если это возможно. Любая помощь будет оценена по достоинству.