Я пытаюсь запустить пользовательский сервис с systemd. Я не админ по профессии, а скорее разработчик.

В настоящее время я тестирую свое решение на Ubuntu 16.04, но планирую развернуть решение на Centos 7. Я надеюсь, что ничего не изменится на самом деле.

Однако до сих пор мне удается сделать следующее по сценарию:

  1. проверьте, что мой сервис эффективно работает при запуске из командной строки
  2. создайте пользователя john с каталогом /home/john (мне нужен этот home), но без пароля. Я читал, что это будет более безопасно (и надеюсь, что я не ошибаюсь ...).
  3. создайте каталог /home/john/.config/systemd/user для хранения моих служебных файлов.
  4. Включить задержку в соответствии с этим документом

Итак, теперь я хотел бы проверить открытие сессии с Джоном и запустить службы, но это не работает. Я пытаюсь сделать это следующим образом:

sam$ sudo su - john
john$ systemctl --user status my-service.service

и собирать это неприятно

Failed to connect to bus: No such file or directory

и независимо от того, какую команду status/start/stop/list-units я ставлю вместо статуса выше, это всегда одно и то же сообщение.

Команда, которая подключает меня к сеансу john, записывается в эту строку:

$journalctl -e

Jun 15 18:16:23 sam-dell sudo[5681]:      sam : TTY=pts/2 ; PWD=/home/sam/IdeaProjects ; USER=root ; COMMAND=/bin/su - john
Jun 15 18:15:02 sam-dell su[5491]: Successful su for john by root
Jun 15 18:15:02 sam-dell su[5491]: + /dev/pts/2 root:john
Jun 15 18:15:02 sam-dell su[5491]: pam_unix(su:session): session opened for user john by (uid=0)
Jun 15 18:15:02 sam-dell su[5491]: pam_systemd(su:session): Cannot create session: Already running in a session

... и ничего не происходит, когда я пытаюсь команды systemctl .

Примечание: я добавил пароль своему пользователю, и он все еще не работает с терминала, открытого в моем сеансе gnome моего пользователя sam . Но поскольку у моего пользователя теперь есть пароль, Ubuntu позволяет мне подключиться к нему с помощью gnome, и я могу без проблем запустить systemctl --user status/start/stop , войдя в сеанс john gnome.

У кого-нибудь есть идея? Возможно, я неправильно понимаю проблему, я просто хочу запустить службу systemd от имени другого пользователя на моем удаленном сервере, поэтому я полагаю, что я поступил правильно, но, возможно, нет.

Большое спасибо за помощь

1 ответ1

0

Обратите внимание, что su не создает вложенный сеанс входа в систему. Все процессы, начатые в сеансе Сэма, все еще принадлежат ему.

Вы должны были бы войти через консоль, gdm, ssh или machinectl login .host (я думаю, что для этого есть более короткие псевдонимы), так как все они начинаются с чистого листа. (Хотя... Я не уверен, почему включение linger не запустило экземпляр systemd. Должен.)

Сама systemctl не обязательно должна быть в нужном сеансе (вы можете sudo -u it), но она использует переменную среды $ XDG_RUNTIME_DIR, чтобы найти экземпляр systemd. Обычно он должен быть установлен в /run/user/<UID> , и этот каталог должен иметь либо сокет bus либо systemd/private .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .