Как запустить tmux/screen с systemd > 230?

Я бегу 16.04 и systemd сейчас убивает tmux когда пользователь отключается ( сводка изменений).

Есть ли способ запустить tmux или же screen (или любая подобная программа) с systemd 230? Я прочитал всю горячую дискуссию о плюсах и минусах поведения, но решения не было предложено.

(Я также вижу поведение в 229)

5 ответов

Решение

RemainAfterExit=

Принимает логическое значение, которое указывает, должна ли служба считаться активной, даже если все ее процессы завершены. По умолчанию нет.

Правильным решением является отключение оскорбительного поведения 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

Основываясь на ответе @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)#

Используя Ubuntu 18.04 с systemd версии 237, ни одно из предложенных решений не помогло мне.

Решение, которое работало для меня, состояло в том, чтобы

  • редактировать /etc/systemd/logind.conf
  • раскомментировать KillExlcudeUsers
  • добавить разделенный пробелами список пользователей (например, KillExlcudeUsers=root user1 user2)

Согласно https://unix.stackexchange.com/a/287282/117599 tmux с помощью

systemd-run --user --scope tmux

также должен сделать свое дело.

Вам нужно установить Type службы для forking, как объяснено здесь.

Давайте предположим, что сервис, в котором вы хотите запустить screen называется minecraft, Тогда вы бы открыли minecraft.service в текстовом редакторе и добавьте или отредактируйте запись Type=forking под разделом [Service],

Другие вопросы по тегам