systemd: inicie o serviço específico do usuário (sem senha) que mantenha o keepalive após o logout

0

Estou tentando executar um serviço específico do usuário com o systemd. Eu não sou um administrador de profissão, mas mais um desenvolvedor.

No momento, estou testando minha solução em um Ubuntu 16.04, mas planejo implantar a solução no Centos 7. Espero que nada mude realmente.

No entanto, até agora eu consegui fazer o seguinte por script:

  1. verifique se meu serviço está sendo executado efetivamente ao iniciar por linha de comando
  2. crie o usuário joão com o diretório /home/john (eu preciso dessa casa), mas sem senha . Eu li que seria mais seguro (e espero não errar ...).
  3. crie o diretório /home/john/.config/systemd/user para armazenar meus arquivos de serviço.
  4. Ative a demora de acordo com este documento

Então, agora eu gostaria de testar a abertura de uma sessão com john e iniciar os serviços, mas não funciona. Eu estou tentando fazer o seguinte:

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

e reúna isto desagradável:

Failed to connect to bus: No such file or directory

e não importa o comando status/start/stop/list-units que eu coloquei no lugar do status acima, é sempre a mesma mensagem.

O comando que me conecta à sessão do john está logado por esta linha:

$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

... e nada ocorre quando estou tentando os comandos systemctl .

Nota: Eu adicionei uma senha ao meu usuário e ele ainda não funciona do terminal aberto na minha sessão do gnome do meu usuário sam . Mas como o meu usuário agora tem uma senha, o Ubuntu permite que eu me conecte a ele com o gnome e eu posso executar o systemctl --user status/start/stop sem nenhum problema registrando na sessão do john gnome.

Alguém tem uma ideia? Eu estou talvez tendo o problema da maneira errada, eu simplesmente quero executar o serviço systemd como outro usuário no meu servidor remoto, então eu suponho que eu estava fazendo certo, mas talvez não.

Muito obrigado por ajudar

    
por sam 15.06.2017 / 17:30

1 resposta

0

Observe que su não cria uma sessão de login aninhada. Todos os processos iniciados na sessão de Sam ainda pertencem a ele.

Você teria que fazer login via console, gdm, ssh ou machinectl login .host (acho que há aliases mais curtos para esse), já que todos eles começam de uma lista limpa. (Embora ... eu não sei por que habilitar linger sozinho não iniciou a instância do systemd. Deve.)

O próprio systemctl não precisa estar na sessão correta (você pode sudo -u-lo), mas depende da variável de ambiente $ XDG_RUNTIME_DIR para encontrar a instância do systemd. Em geral, ele deve ser definido como /run/user/<UID> , e esse diretório deve ter um bus socket ou um systemd/private one.

    
por 15.06.2017 / 18:04