ユーザーのシャットダウン時にシステムサービスが停止しました - 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

関連情報