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.