O Systemd Service para na sua saída de usuário - o trecho do debian 9

0

Então, estou sentado em um problema que enfrentei ao configurar meu servidor teamspeak (corretamente!). O servidor Teamspeak e sua configuração estão totalmente bem. Meu problema começou quando eu queria que ele fosse iniciado na inicialização do sistema. Agora, como criar um script de auto-inicialização, etc. Eu já fiz isso e já funcionou no passado. Mas desta vez eu quero fazer isso apenas com um serviço systemd, já que já existe um startcript fornecido pelo teamspeak.

Então, depois de dar um contexto, vamos ao problema: Com a configuração do serviço (veja abaixo), que estou usando agora, o servidor teamspeak inicia perfeitamente na inicialização do sistema. Mas quando eu faço login com o usuário "teamspeak", faço algumas coisas e, em seguida, digito exit, o servidor teamspeak está sendo desligado e reiniciado logo depois disso.

[Unit]
Description=TeamSpeak 3 Server

[Service]
ExecStart=/teamspeak/ts3server_startscript.sh start
ExecStop=/teamspeak/ts3server_startscript.sh stop
PIDFile=/teamspeak/ts3server.pid
Restart=always
StandardOutput=syslog
StandardError=syslog
SyslogIdentifier=teamspeak_server
User=teamspeak
Group=teamspeak
Type=Forking
[Install]
WantedBy=multi-user.target

Portanto, a reinicialização vem de "Restart = always" e eu tenho cem por cento de certeza de que o shutdown do teamspeak vem do serviço. Eu já tentei "RemainAfterExit = true", mas a única coisa que fez, não é fazer o servidor teamspeak reiniciar após o logout do usuário (desde que ele pense que o serviço ainda está ativo, mas os processos onde todos fechados. Pelo menos isso é como eu entendo que o serviço está funcionando e por que ele está parando meu servidor teamspeak.

Então, em suma: Como eu evito que o serviço chame o comando ExecStop quando o usuário do teamspeak sai de sua sessão (no meu caso putty, ssh-connection)

Aqui está um bom resumo de todas as opções de systemd.service: clique em

Eu, mesmo jogando contra o que escrevi acima, também escrevi um script que envolve o ts3server_minimal_startscript.sh em uma sessão de tela. O script funcionou perfeitamente bem quando usado manualmente, mas eu ainda tinha exatamente o mesmo problema usando-o através do serviço. Como eu disse, eu preferiria uma versão sem tela já que o ts3server_startscript.sh já cria um processo próprio para o servidor ts.

EDITAR: Esqueci de dizer que criei o serviço em /etc/systemd/system/teamspeak.service. A partir de uma solicitação, aqui está a resposta do status systemctl antes de sair do usuário do teamspeak:

● teamspeak.service - TeamSpeak 3 Server
   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor 
preset
: enabled)
   Active: active (running) since Sat 2018-04-14 17:35:08 CEST; 23h a
go
  Process: 3344 ExecStop=/teamspeak/ts3server_startscript.sh stop 
(code=exited,
status=0/SUCCESS)
 Main PID: 3361 (ts3server)
    Tasks: 17 (limit: 4915)
   CGroup: /system.slice/teamspeak.service
           └─3361 ./ts3server

Apr 14 17:35:08 srv83030 systemd[1]: Started TeamSpeak 3 Server.
Apr 14 17:35:08 srv83030 teamspeak_server[3357]: Starting the TeamSpeak 3 
server

1 ms depois que saí do usuário do palpite:

● teamspeak.service - TeamSpeak 3 Server
   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor 
preset
: enabled)
   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 1ms a
go
  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop 
(code=exited,
status=0/SUCCESS)
 Main PID: 5388 (ts3server_start)
    Tasks: 0 (limit: 4915)
   CGroup: /system.slice/teamspeak.service
           └─5388 /bin/sh /teamspeak/ts3server_startscript.sh start

Apr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.

2s depois que saí do usuário do Teamspeak:

● teamspeak.service - TeamSpeak 3 Server
   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor 
preset
: enabled)
   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 2s ag
o
  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop 
(code=exited,
status=0/SUCCESS)
 Main PID: 5392 (ts3server)
    Tasks: 16 (limit: 4915)
   CGroup: /system.slice/teamspeak.service
           └─5392 ./ts3server

Apr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.
Apr 15 16:55:11 srv83030 teamspeak_server[5388]: Starting the TeamSpeak 3 
server

E mais um pouco depois de voltar a fazer login com o usuário do teamspeak:

● teamspeak.service - TeamSpeak 3 Server
   Loaded: loaded (/etc/systemd/system/teamspeak.service; enabled; vendor 
preset: enabled)
   Active: active (running) since Sun 2018-04-15 16:55:11 CEST; 3min 43s ago
  Process: 5372 ExecStop=/teamspeak/ts3server_startscript.sh stop 
(code=exited, status=0/SUCCESS)
 Main PID: 5392 (ts3server)
    Tasks: 16 (limit: 4915)
   CGroup: /system.slice/teamspeak.service
           └─5392 ./ts3server

Apr 15 16:55:11 srv83030 systemd[1]: Started TeamSpeak 3 Server.
Apr 15 16:55:11 srv83030 teamspeak_server[5388]: Starting the TeamSpeak 3 
server

EDIT2: Talvez também seja útil saber que o diretório inicial do usuário teamspeak está em / teamspeak. Então, exatamente onde também está o startcript.

    
por Apahdos 14.04.2018 / 01:51

2 respostas

0

Acho que este serviço não deve ser executado para o usuário / grupo específico (teamspeak).

Para iniciar, faça backup de todos os seus arquivos (arquivo de serviço, etc.) e, em seguida, desative-o:

# systemctl disable teamspeak.service

também, remova / exclua o arquivo físico teamspeak.service que você copiou no sistema.

ssh no seu servidor como root user e tente isto:

Edite seu arquivo teamspeak.service :

[Unit]
Description=TeamSpeak 3 Server
After=network.target

[Service]
ExecStart=/teamspeak/ts3server_startscript.sh start
ExecStop=/teamspeak/ts3server_startscript.sh stop
RestartSec=1s


[Install]
WantedBy=default.target

Em seguida, instale a unidade% service systemd e ative-a para que ela seja executada no momento da inicialização:

# cp  teamspeak.service /etc/systemd/system/
# chmod 0664 /etc/systemd/system/teamspeak.service
# systemctl daemon-reload
# systemctl enable teamspeak.service

inicie o serviço:

# systemctl start teamspeak.service

procure a resposta OK (ponto verde).

para descobrir se o serviço existe ou está configurado:

# systemctl list-unit-files --type=service | grep teamspeak

indague sobre o serviço:

# service teamspeak status

Nota: URL de referência do systemd - link

    
por 14.04.2018 / 16:45
0

Você pode tentar configurar o systemd para não matar processos do usuário no logout do usuário desejado:

sudo loginctl enable-linger teamspeak
    
por 14.04.2018 / 21:30