systemd> 230でtmux / screenを実行するには?


19

16.04を実行し、ユーザーが切断したときにsystemd強制終了tmuxします(変更の概要)。

230で実行tmuxするscreen(または同様のプログラム)方法はありsystemdますか?私はビヘイビアの賛否両論についての白熱した議論をすべて読みましたが、解決策は提案されませんでした。

(229でも同様の動作が見られます)


1
それは奇妙です-私は持っていますsystemd-229-4ubuntu7(xenial-updatesから)、私はこの動作を見ていません。とにかく、この動作はすでにDebianでsystemd-230-2元に戻されているので、おそらくUbuntuでもすぐに元に戻されるでしょう。
MvanGeest

mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-supportには、以前のようにsysvinitをインストールして使用できるprevent-systemd- *パッケージがあります
-mirabilos

回答:


1

systemdバージョン237Ubuntu 18.04を使用すると、提案されたソリューションはどれもうまくいきませんでした。

私のために働いた解決策は

  • 編集する /etc/systemd/logind.conf
  • コメント解除 KillExlcudeUsers
  • ユーザーのスペースで区切られたリストを追加します(例えば、KillExlcudeUsers=root user1 user2

19

適切な解決策は、システム全体で問題のあるsystemdの動作を無効にすることです。

編集/etc/systemd/logind.conf(もちろんsudoする必要があります)および設定

KillUserProcesses=no

この設定を別のファイル、たとえばに置くこともできます/etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf

その後、再起動しsystemd-logind.serviceます。

sudo systemctl restart systemd-logind

4
システム全体の設定を行うために、1つのユニットに固有の問題を適切に解決するにはどうすればよいですか?
jpath

質問を間接的に参照している他のすべての議論はもちろん、質問を読んだだけでもわかるように、これは1つのアプリケーションに固有のものではありません。これは、質問で太字になっている点です。
JdeBP

ユーザーのlingeringを有効にする必要がありますloginctl enable-linger <user>。From man loginctl:「特定のユーザーに対して有効にすると、ユーザーマネージャーが起動時にユーザーに対して生成され、ログアウト後も保持されます。これにより、ログインしていないユーザーが長時間実行されるサービスを実行できます。」
エイドリアンギュンター

Ubuntu 18.04はこちら。これは、リブート後でも機能しません。残留を有効にしても、どちらでもありません。
Pa_

11

@Rinzwindの答えに基づいており、ユニットの説明に触発されて、私が見つけることができる最善の方法は、TaaS(Tmux as a Service)を使用するtmuxことです。

# cat /etc/systemd/system/tmux@.service

[Unit]
Description=tmux default session (detached)
Documentation=man:tmux(1)

[Service]
Type=oneshot
RemainAfterExit=yes
ExecStart=/usr/bin/tmux new-session -d -s %I
ExecStop=/usr/bin/tmux kill-server
KillMode=none

[Install]
WantedBy=multiplexer.target

# systemctl start tmux@instanceone.service
# systemctl start tmux@instancetwo.service
# tmux list-sessions

instanceone: 1 windows (created Sun Jul 24 00:52:15 2016) [193x49]
instancetwo: 1 windows (created Sun Jul 24 00:52:19 2016) [193x49]

# tmux attach-session -t instanceone

(instanceone)#

これはきちんとしていますが、私が人生であなたがそれを使う理由を理解することはできません!:)
sarnold 16

5
@sarnold:コンソールで起動するが、起動時に実行されると想定されるアプリケーションを制御できるようにするため。Minecraftはその一例です。
WoJ 16

5

RemainAfterExit =

すべてのプロセスが終了した場合でも、サービスをアクティブと見なすかどうかを指定するブール値を取ります。デフォルトはnoです。


ありがとう。ソリューションの核心を提供するので、私はあなたの答えを受け入れ、+ 1しました。インタラクティブモードで使用できるかどうか(tmux私の答えではなく、インタラクティブに起動することで)知っていますか?
WoJ

疑わしい。systemdは、systemdに次のように指示しない限り、おそらくtmuxを気にしません:-P(これへのアプローチは、ひたむきです。...それは彼らの方法であるか、方法がないようです。)投稿されました。あなたのものを受け入れたり、あなたのものを拡大したりしてください;-)私は担当者を必要としない>:-D
Rinzwind

3
この回答には、その設定を使用する場所などの詳細が必要です。
カスペルド

1
確かに、答えはマニュアルページのコピー/ペーストになります;-)
Rinzwind

1
@WoJ別名tmuxとしてsystemd-run --remain-after-exit tmux(または--scope --userフラグを付けて)を開始することができます。
デビルスキー

2

ここで説明するTypeように、サービスのを設定する必要がありますforking

レッツは、あなたが実行したいサービスが前提とscreen呼ばれていますminecraft。次にminecraft.service、テキストエディタで開きType=forking、セクションの下にエントリを追加または編集し[Service]ます。


0

よると/unix//a/287282/117599呼び出すtmux使用

systemd-run --user --scope tmux

また、トリックを行う必要があります。


残念ながら、これは18.10宇宙では動作しなくなったようです。
taneli
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.