Wie starte ich tmux / screen mit systemd> 230?

19

Ich starte 16.04 und systemdtöte jetzt, tmuxwenn der Benutzer die Verbindung trennt ( Zusammenfassung der Änderung) ).

Gibt es eine Möglichkeit, tmuxoder screen(oder ein ähnliches Programm) mit systemd230 auszuführen ?Ich las die hitzige Diskussion über Vor- und Nachteile des Benehmens, aber es wurde keine Lösung vorgeschlagen.

(Ich sehe das Verhalten auch in 229)

WoJ
quelle
1
Das ist seltsam - ich habe systemd-229-4ubuntu7(von Xenial-Updates) und ich sehe dieses Verhalten nicht. Wie auch immer, dieses Verhalten wurde bereits in Debian zurückgesetztsystemd-230-2 , so dass es wahrscheinlich bald auch in Ubuntu zurückgesetzt wird.
MvanGeest
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support enthält prevent-systemd- * -Pakete, mit denen Sie sysvinit wie früher installieren und verwenden können
mirabilos

Antworten:

1

Unter Ubuntu 18.04 mit Systemd Version 237 funktionierte keine der vorgeschlagenen Lösungen für mich.

Die Lösung, die für mich funktionierte, war zu

  • Bearbeiten Sie die /etc/systemd/logind.conf
  • Unkommentar KillExlcudeUsers
  • Füge eine durch Leerzeichen getrennte Liste von Benutzern hinzu (zB KillExlcudeUsers=root user1 user2)
Angst
quelle
19

Die richtige Lösung besteht darin, das Systemverhalten systemweit zu deaktivieren.

Bearbeiten /etc/systemd/logind.conf( Sie müssen natürlich sudo ) und einstellen

KillUserProcesses=no

Sie können diese Einstellung auch in einer separaten Datei ablegen, z /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Dann neu starten systemd-logind.service.

sudo systemctl restart systemd-logind
Michael Hampton
quelle
4
Wie ist die richtige Lösung für ein Problem, das für ein Gerät spezifisch ist, um systemweite Einstellungen vorzunehmen?
Jpath
Weil, wie Sie sehen können, wenn Sie nur die Frage lesen, geschweige denn die gesamte andere Diskussion darüber, auf die sich die Frage indirekt bezieht, ist dies nicht spezifisch für eine Anwendung. Dies ist ein Punkt, der in der Frage sogar fett gedruckt ist.
JdeBP
Sie müssen nur das Verweilen für den Benutzer über aktivieren loginctl enable-linger <user>. Von man loginctl: "Wenn für einen bestimmten Benutzer aktiviert, wird beim Start ein Benutzermanager für den Benutzer erstellt und nach dem Abmelden beibehalten. Dadurch können Benutzer, die nicht angemeldet sind, Dienste mit langer Laufzeit ausführen."
Adrian Günter
Ubuntu 18.04 hier. Dies funktioniert auch nach einem Neustart nicht. Das Aktivieren des Verweilens funktioniert auch nicht.
Pa_
11

Basierend auf der Antwort von @ Rinzwind und inspiriert von einer Beschreibung der Einheit, ist das Beste, was ich finden kann, TaaS (Tmux as a Service) zu verwenden - eine generische, getrennte Instanz, an die tmuxeine Verbindung hergestellt werden kann.

# cat /etc/systemd/system/[email protected]

[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 [email protected]
# systemctl start [email protected]
# 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)#
WoJ
quelle
Das ist ordentlich, aber ich kann nicht für das Leben von mir herausfinden, warum Sie es verwenden würden! :)
Sarnold
5
@sarnold: um Anwendungen steuern zu können, die mit einer Konsole beginnen, aber beim Booten ausgeführt werden sollen. Minecraft ist ein Beispiel.
WoJ
5

RemainAfterExit =

Nimmt einen booleschen Wert an, der angibt, ob der Dienst auch dann als aktiv betrachtet werden soll, wenn alle seine Prozesse beendet werden. Der Standardwert ist no.

Rinzwind
quelle
Vielen Dank. Ich habe Ihre Antwort angenommen und +1 gegeben, da sie den Kern der Lösung darstellt. Würdest du wissen, ob es in einem interaktiven Modus verwendet werden kann (durch tmuxinteraktives Starten im Gegensatz zu meiner Antwort)?
WoJ
bezweifel es. systemd kümmert sich wahrscheinlich nicht um dein tmux, es sei denn, du sagst systemd, dass es folgendes tun soll :-P (ihr Ansatz ist eher zielstrebig .... es scheint, als ob es ihr Weg ist oder nicht.) Du brauchst eine Einheitenbeschreibung wie du Gesendet. Fühlen Sie sich frei, Ihre zu akzeptieren und / oder zu erweitern ;-) Ich brauche nicht die rep>: - D
Rinzwind
3
Diese Antwort muss genauer beschrieben werden, z. B. wo diese Einstellung verwendet werden soll.
Kasperd
1
Sicher, aber die Antwort wird ein Kopieren / Einfügen der Handbuchseite sein
;-)
1
@WoJ Sie können einen Alias ​​für tmuxden Start als systemd-run --remain-after-exit tmux(oder vielleicht sogar mit--scope --user Flags) .
Debilski
2

Sie müssen Typeden Dienst auf einstellen forking, wie hier erklärt .

Angenommen, der Dienst, in dem Sie ausgeführt werden möchten, screenheißt minecraft. Anschließend öffnen Sie minecraft.serviceeinen Texteditor und fügen den Eintrag Type=forkingunter dem Abschnitt hinzu oder bearbeiten ihn [Service].

Robin Hartmann
quelle
0

Gemäß /unix//a/287282/117599 aufrufen tmuxmit

systemd-run --user --scope tmux

sollte auch den Trick machen.

phk
quelle
Leider scheint dies in 18.10 Cosmic nicht mehr zu funktionieren.
Taneli