사용자 종료 시 시스템 서비스가 중지되었습니다 - debian 9stretch

사용자 종료 시 시스템 서비스가 중지되었습니다 - debian 9stretch

그래서 Teampeak 서버를 설정하는 데 문제가 발생했습니다(맞습니다!). Teamspeak Server와 그 구성은 완전히 괜찮습니다. 내 문제는 시스템 부팅 시 시작되기를 원할 때 시작됩니다. 이제 자동 시작 스크립트 등을 만드는 방법을 소개합니다. 나는 그것을 해왔고 과거에는 효과가 있었습니다. 하지만 이번에는 teampeak가 이미 시작 스크립트를 제공하므로 systemd 서비스를 사용하고 싶습니다.

따라서 몇 가지 배경 지식을 바탕으로 문제를 살펴보겠습니다. 지금 사용하고 있는 서비스 구성(아래 참조)을 사용하면 Teamspeak 서버가 시스템 부팅 시 완벽하게 시작됩니다. 그러나 사용자 "teamspeak"로 로그인하여 일부 작업을 수행한 다음 종료를 입력하면 Teamspeak 서버가 종료된 다음 다시 시작됩니다.

[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

따라서 다시 시작은 "Restart=always"에서 발생하며 100% 확신합니다. teampeak-shutdown은 해당 서비스에서 발생합니다. "RemainAfterExit=true"를 시도했지만 유일한 것은 사용자가 로그아웃한 후 Teampeak 서버를 다시 시작하지 않는다는 것입니다(서비스가 여전히 활성 상태이지만 프로세스가 모두 종료되었다고 생각하게 만들기 때문입니다. 적어도 그것이 내가 하는 방법입니다. 어떤 서비스가 실행 중이고 왜 내 Teampeak 서버가 중지되었는지 이해합니다.

간단히 말해서: teampeak 사용자가 세션을 종료할 때 서비스가 ExecStop 명령을 호출하지 못하도록 방지하는 방법(제 경우에는 putty, ssh 연결)

다음은 모든 systemd.service 옵션에 대한 요약입니다.클릭 해주세요

위에서 쓴 내용과 상반되지만 ts3server_minimal_startscript.sh를 스크린 세션으로 래핑하는 스크립트도 작성했습니다. 스크립트는 수동으로 사용할 때 완벽하게 작동하지만 서비스를 통해 사용할 때는 여전히 동일한 문제가 있습니다. 앞서 말했듯이 ts3server_startscript.sh가 이미 ts-server에 대한 자체 프로세스를 생성했기 때문에 저는 비화면 버전을 선호합니다.

편집: /etc/systemd/system/teamspeak.service에서 서비스를 생성했다는 사실을 언급하는 것을 잊어버렸습니다. 요청에 따라 teampeak 사용자에서 로그아웃하기 전 systemctl 상태 응답은 다음과 같습니다.

● 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

Teampeak 사용자 종료 후 1ms:

● 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.

Teamspeak 사용자를 종료한 지 2초 후:

● 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

Teampeak 사용자로 다시 로그인한 후 다른 사용자가 나타났습니다.

● 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: teampeak 사용자의 홈 디렉터리가 /teamspeak에 있다는 것을 아는 것도 유용할 수 있습니다. 그래서 시작 스크립트도 거기에 있습니다.

답변1

원하는 사용자가 로그오프할 때 사용자 프로세스를 종료하지 않도록 systemd를 구성해 볼 수 있습니다.

sudo loginctl enable-linger teamspeak

답변2

특정 사용자/그룹(teamspeak)을 대상으로 서비스를 실행해서는 안 된다고 생각합니다.

먼저 모든 파일(서비스 파일 등)을 백업한 다음 비활성화합니다.

# systemctl disable teamspeak.service

또한 시스템에 복사한 실제 teampeak.service 파일을 제거/삭제하세요.

사용자로 서버에 SSH로 접속 root하고 다음을 시도하십시오.

파일 을 편집하세요 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

다음으로 서비스 유닛을 설치 systemd하고 시작 시 실행되도록 활성화합니다.

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

서비스를 시작합니다:

# systemctl start teamspeak.service

OK 응답(녹색 점)을 찾습니다.

서비스가 존재하거나 구성되어 있는지 확인합니다.

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

문의 서비스:

# service teamspeak status

참고: 시스템 참조 URL -https://wiki.debian.org/systemd

관련 정보