systemd: запускать пользовательскую (без пароля) специальную службу, поддерживающую активность после выхода из системы

908
sam

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

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

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

  1. проверьте, что мой сервис эффективно работает при запуске из командной строки
  2. создайте пользователя john с /home/johnкаталогом (мне нужен этот дом), но без пароля . Я читал, что это будет более безопасно (и надеюсь, что я не ошибаюсь ...).
  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 от имени другого пользователя на моем удаленном сервере, поэтому я полагаю, что я поступил правильно, но, возможно, нет.

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

0

1 ответ на вопрос

0
grawity

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

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

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

Я попробовал на сервере (Centos 7). Я создал пользователя и включил задержку. Поместите несколько .ssh / ids, чтобы я мог открыть сессию ssh. sam 6 лет назад 0
Ах да, CentOS вообще не имеет этой функции. Они хирургически удаляют это. grawity 6 лет назад 0
Я попробовал на сервере (Centos 7). Я создал пользователя и включил задержку. Поместите несколько .ssh / ids, чтобы я мог открыть сессию ssh. Я создал простой сервис и проверил, что он работает нормально с правами root при наличии ссылки в / etc / systemd / system. Затем удалите символическую ссылку и поместите службу в /home/john/.config/systemd/system/my-service.service, но соберите всегда `systemctl --user start my-service Не удалось получить соединение D-Bus: такого файла нет или directory` sam 6 лет назад 0
неужели они убрали ??? !!! Какая особенность затянулась или --user? sam 6 лет назад 0