如何使用 systemd > 230 运行 tmux/screen?

WoJ*_*WoJ 24 gnu-screen tmux systemd

我运行 16.04,systemd现在tmux在用户断开连接时终止(更改摘要)。

有没有办法用230运行tmuxscreen(或任何类似的程序)systemd我阅读了所有关于行为的利弊的激烈讨论,但没有提出解决方案。

(我也看到了 229 中的行为)

Mic*_*ton 21

正确的解决方案是在系统范围内禁用有问题的 systemd 行为。

编辑/etc/systemd/logind.conf(当然你必须 sudo)并设置

KillUserProcesses=no
Run Code Online (Sandbox Code Playgroud)

您也可以将此设置放在单独的文件中,例如/etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

然后重新启动systemd-logind.service

sudo systemctl restart systemd-logind
Run Code Online (Sandbox Code Playgroud)

  • 如何正确解决特定于一台设备的问题以设置一些系统范围的设置? (5认同)
  • 您只需要通过“loginctl enable-linger <user>”为用户启用延迟。来自“man loginctl”:“如果为特定用户启用,则会在启动时为该用户生成一个用户管理器,并在注销后保留。这允许未登录的用户运行长时间运行的服务。” (2认同)
  • Ubuntu 18.04 在这里。这不起作用,即使在重新启动后也不起作用。启用延迟也不是。 (2认同)

WoJ*_*WoJ 14

基于@Rinzwind 的回答并受到单元描述的启发,我能找到的最好的方法是使用 TaaS(Tmux 即服务)——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)#
Run Code Online (Sandbox Code Playgroud)

  • @sarnold:能够控制以控制台启动但假设在启动时运行的应用程序。Minecraft 就是一个例子。 (8认同)

Rin*_*ind 7

退出后保持=

采用一个布尔值,指定服务是否应被视为活动,即使其所有进程都退出。默认为否。

  • 此答案需要更多详细信息,例如在何处使用该设置。 (3认同)

小智 4

使用Ubuntu 18.04systemd 版本 237,所有建议的解决方案都不适合我。

对我有用的解决方案是

  • 编辑/etc/systemd/logind.conf
  • 取消注释KillExlcudeUsers
  • 添加空格分隔的用户列表(例如,KillExlcudeUsers=root user1 user2