TeamSpeakを起動および停止するシステムサービススクリプトがあります。手動で起動および停止すると正常に動作しますが、サーバーの再起動時にTeamSpeakが自動的に起動しません。ファイルは次のようになります。
[Unit]
Description=TeamSpeak Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
Type=forking
WorkingDirectory=/usr/local/bin/teamspeak3-server_linux-amd64
ExecStart=/usr/local/bin/teamspeak3-server_linux-amd64/ts3server_startscript.sh start
ExecReload=/usr/local/bin/teamspeak3-server_linux-amd64/ts3server_startscript.sh restart
ExecStop=/usr/local/bin/teamspeak3-server_linux-amd64/ts3server_startscript.sh stop
PIDFile=/usr/local/bin/teamspeak3-server_linux-amd64/ts3server.pid
User=smares
Group=smares
[Install]
WantedBy=multi-user.target
私のArk:Survival Evolvedサーバーの次のスクリプトは正常に実行されます。
[Unit]
Description=ARK: Survival Evolved Server
Wants=network-online.target
After=syslog.target network.target nss-lookup.target network-online.target
[Service]
ExecStart=/home/smares/Steam/games/ark/ShooterGame/Binaries/Linux/ShooterGameServer TheIsland?MaxPlayers=5?listen -server -log
LimitNOFILE=100000
ExecReload=/bin/kill -s HUP $MAINPID
ExecStop=/bin/kill -s INT $MAINPID
User=smares
Group=smares
[Install]
WantedBy=multi-user.target
私は何が間違っていましたか?
答え1
Ubuntu Server 16.04でTeamSpeakサーバーをセットアップしているときに同じ問題に直面し、次のsystemdデバイス(に保存/etc/systemd/system/teamspeak3.service
)を使用して問題を解決しました。
[Unit]
Description=TeamSpeak3 Server
Wants=network-online.target
After=syslog.target network.target
[Service]
WorkingDirectory=/opt/teamspeak3-server
User=teamspeak3-user
Type=forking
ExecStart=/opt/teamspeak3-server/ts3server_startscript.sh start initfile=ts3server.ini
ExecStop=/opt/teamspeak3-server/ts3server_startscript.sh stop
ExecReload=/opt/teamspeak3-server/ts3server_startscript.sh reload
PIDFile=/opt/teamspeak3-server/ts3server.pid
[Install]
WantedBy=multi-user.target
次のようにこのサービスを有効にすると:
systemctl enable teamspeak3.service
提供された出力がないため、journalctl -u teamspeak3.service
正確に問題が何であるかを言うのは難しいです。また、指定したのと同じ構成を使用してテストしましたが、After
効果がありました。問題は、サービスが正しく有効になっていないか、パラメータ.ini
に設定を指定していないため、ファイルに問題があることですExecStart
。
答え2
[Unit]
Description=TeamSpeak3 Server
Wants=network-online.target
After=syslog.target network.target
[Service]
WorkingDirectory=/opt/teamspeak3
User=teamspeak
Type=simple
ExecStart=/opt/teamspeak3/ts3server
[Install]
WantedBy=multi-user.target
Type=simple
使用すると、より効果が良いと思います。このように、systemdはプロセスを監視し、journalctl
出力からteampeakサーバーのstdout出力を取得することもできます。