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


19

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

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

(Я також бачу поведінку в 229 році)


1
Це дивно - у мене є systemd-229-4ubuntu7(з xenial-updates), і я не бачу такої поведінки. У будь-якому випадку, ця поведінка вже була відвернена в Debiansystemd-230-2 , тому вона, ймовірно, незабаром буде повернена і в Ubuntu.
MvanGeest

mirbsd.org/~tg/Debs/dists/jessie/wtf/Pkgs/mirabilos-support має пакети preven-systemd- *, які дозволяють встановлювати та використовувати sysvinit, як раніше
mirabilos

Відповіді:


1

Використовуючи Ubuntu 18.04 із системною версією 237 , жодне із запропонованих рішень не працювало для мене.

Рішення, яке працювало для мене, полягало в тому, щоб

  • редагувати /etc/systemd/logind.conf
  • компентування KillExlcudeUsers
  • додати список користувачів, розділених пробілом (наприклад, KillExlcudeUsers=root user1 user2)

19

Правильне рішення - відключити поведінку, яка порушує системну поведінку на всій території.

Редагуйте /etc/systemd/logind.conf( звичайно, ви повинні судо , звичайно) і встановіть

KillUserProcesses=no

Ви також можете помістити цей параметр в окремий файл, наприклад /etc/systemd/logind.conf.d/99-dont-kill-user-processes.conf.

Потім перезапустіть systemd-logind.service.

sudo systemctl restart systemd-logind

4
Як правильно вирішити проблему, характерну для одного блоку, щоб встановити деяку загальну систему?
jpath

Тому що, як ви бачите, навіть не читаючи питання, не кажучи вже про всі інші дискусії в іншому місці про це, що питання побічно посилається, це не характерно для однієї програми. Це пункт, який навіть у жирному питанні є жирним шрифтом.
JdeBP

Вам просто потрібно включити затримку для користувача через loginctl enable-linger <user>. З man loginctl: "Якщо увімкнено для конкретного користувача, менеджер користувачів створюється для користувача під час завантаження та зберігається після виходу з системи. Це дозволяє користувачам, які не ввійшли в систему, запускати тривалі послуги."
Адріан Гюнтер

Ubuntu 18.04 тут. Це не працює, навіть після перезавантаження. Увімкнення тривалості також не означає.
Па_

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)#

Це акуратно, але я не можу за все життя зрозуміти, для чого ти його використовуєш! :)
sarnold

5
@sarnold: мати можливість керувати програмами, які починаються з консолі, але які, мабуть, працюють під час завантаження. Minecraft - один із прикладів.
WoJ

5

RemainAfterExit =

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


Спасибі. Я прийняв та поставив +1 вашій відповіді, оскільки вона є основою рішення. Чи знаєте ви, чи можна його використовувати в інтерактивному режимі (запускаючи tmuxінтерактивно, на відміну від моєї відповіді)?
WoJ

сумніваюся. systemd, мабуть, не піклується про ваш tmux, якщо ви не скажете systemd, що він повинен :-P (їхній підхід до цього досить однодумний .... здається, що це їхній шлях чи ні.) Вам потрібен опис одиниці, як ви розміщено. Не соромтеся приймати своє та / або розширювати своє ;-) Мені не потрібна відповідь>: - D
Rinzwind

3
Ця відповідь потребує більш детальної інформації, наприклад, де використовувати це налаштування.
kasperd

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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.