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

19

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

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

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

WOJ
источник
1
Это странно - у меня есть systemd-229-4ubuntu7(из xenial-updates), и я не вижу такого поведения. В любом случае, это поведение уже было изменено в Debiansystemd-230-2 , так что, вероятно, оно скоро будет изменено и в Ubuntu.
MvanGeest
mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support имеет пакеты предотвращение-systemd- *, которые позволяют устанавливать и использовать sysvinit, как и раньше
mirabilos

Ответы:

1

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

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

  • редактировать /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
Как правильно решить проблему, характерную для одного устройства, чтобы установить некоторые системные настройки?
17
Потому что, как вы можете видеть, даже читая вопрос, не говоря уже обо всех других дискуссиях в другом месте об этом, на который этот вопрос косвенно ссылается, это не относится только к одному приложению. Это пункт, который даже выделен жирным шрифтом в этом вопросе.
JdeBP
Вам просто нужно включить задержку для пользователя через loginctl enable-linger <user>. From man loginctl: «Если этот параметр включен для конкретного пользователя, для него запускается менеджер пользователей, который сохраняется после выхода из системы. Это позволяет пользователям, не вошедшим в систему, запускать долго работающие службы».
Адриан Гюнтер
Ubuntu 18.04 здесь. Это не работает, даже после перезагрузки. Включение затянувшегося тоже не дает.
19
11

Основываясь на ответе @ 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)#
WOJ
источник
Это здорово, но я не могу понять, зачем ты это используешь! :)
sarnold
5
@sarnold: чтобы иметь возможность управлять приложениями, которые запускаются с консоли, но предполагается, что они работают во время загрузки. Minecraft является одним из примеров.
WoJ
5

RemainAfterExit =

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

Rinzwind
источник
Благодарю. Я принял и +1 ваш ответ, так как он дает суть решения. Знаете ли вы, если это можно использовать в интерактивном режиме (запуск в tmuxинтерактивном режиме, в отличие от моего ответа)?
WoJ
сомневаюсь. systemd, вероятно, не будет заботиться о вашем tmux, если вы не скажете systemd, что он должен :-P (их подход к этому довольно целеустремленный .... кажется, что это их путь или нет). Вам нужно описание модуля, подобное вам вывешенный. Не стесняйтесь принимать ваши и / или расширять свои ;-) Мне не нужен представитель>: - D
Rinzwind
3
Этот ответ требует более подробной информации, например, где использовать этот параметр.
Касперд
1
Конечно, но ответом будет копия / вставка справочной страницы ;-)
Rinzwind
1
@WoJ Вы можете сделать псевдоним для tmuxзапуска как systemd-run --remain-after-exit tmux(или, возможно, даже с --scope --userфлагами).
Debilski
2

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

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

Робин Хартманн
источник
0

Согласно /unix//a/287282/117599 вызова с tmuxиспользованием

systemd-run --user --scope tmux

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

PHK
источник
К сожалению, это, кажется, больше не работает в 18.10 космических.
танели