그래서 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