сессия tmux, уничтоженная при разъединении от ssh

Я имею, находят его наконец, поскольку это - простое понятие./dev/sdb имеет 3000 ГБ, где fidsk не будет поддерживать, потому что он будет поддерживать жесткий диск только на 2000 ГБ. Вместо этого fdisk мы должны использовать разделенный.

23
23.12.2014, 19:23
5 ответов

Теория

Некоторые init-системы, включая systemd, предоставляют возможность убить все процессы, принадлежащие службе. Обычно сервис запускает один процесс, который создает больше процессов с помощью форкинга, и эти процессы также могут это сделать. Все такие процессы обычно считаются частью службы. В systemd это делается с помощью cgroups .

В systemd все процессы, принадлежащие службе, убиваются, когда служба останавливается по умолчанию. Очевидно, что SSH-сервер является частью сервиса. Когда вы подключаетесь к серверу, SSH-сервер обычно вилки и новый процесс обрабатывает вашу SSH-сессию. С помощью вилки из сеанса SSH или его дочерних процессов запускаются другие процессы на стороне сервера, включая ваш экран или tmux .

Killmode and socket activation

Поведение по умолчанию может быть изменено с помощью директивы KillMode. Проект AFAIK не включает файлы .service и поэтому они различаются в зависимости от дистрибутива. Обычно есть два способа включить SSH в вашей системе. Первый - классический ssh.service, который поддерживает длительное прослушивание SSH демоном в сети. Другой способ заключается в активации сокета, обрабатываемого сокетом ssh.socket, который, в свою очередь, запускает sshd@.service, который работает только в течение одного сеанса SSH.

Solutions

Если ваши процессы будут убиты в конце сеанса, возможно, что вы используете активацию сокета, и он будет убит системойd, когда она заметит, что процесс сеанса SSH завершился. В этом случае есть два решения. Первое заключается в том, чтобы избежать использования активации сокетов, используя ssh.service вместо ssh.socket. Другое решение - установить KillMode=процесс в разделе Service службы ssh@.service.

Настройка KillMode=process также может быть полезна при использовании классического ssh.service, так как она позволяет избежать убийства процесса сеанса SSH или процессов screen или tmux, когда сервер останавливается или перезагружается.

Будущие заметки

Этот ответ, по-видимому, приобрел определенную популярность. В то время как он работал для операционной системы, может случиться, что он не будет работать для кого-то в будущем из-за разработки или конфигурации systemd-logind. Пожалуйста, ознакомьтесь с документацией по сеансам логина, если вы испытываете поведение, отличное от описания в этом ответе.

16
27.01.2020, 19:42

Используете ли вы SystemD с активацией сокета для SSH?

Если это так, есть известный вопрос с этим . Согласно системам системы Systemd, это на самом деле является функцией - Systemd убивает все процессы, порожденные сеансом, когда сеанс завершается. (Я вижу, что это полезно, но в экране GNU , или TMUX , Case, вы определенно не хотите Хотите, чтобы ☺ ни в большинстве других случаев Куда, конечно, пользователи могут запускать фоновые процессы, конечно.)

Если так, попробовать переключение из SSHD.Socket на SSHD.Service .

5
27.01.2020, 19:42

Другим решением, не требующим перехода от sshd.socket к sshd.service, является запуск tmux сервера как systemd service [0]. Таким образом, сервер tmux уже запущен, когда вы подключаетесь к нему по SSH, а не порожден командой tmux в SSH, и поэтому не будет убит.

[0] https://wiki.archlinux.org/index.php/tmux#Autostart_with_systemd

2
27.01.2020, 19:42

У меня была такая же проблема с tmux и screen в Ubuntu 16.04 (kde neon). Когда сеанс ssh был отключен, экран / tmux был завершен.

Короче говоря, systemd изменила настройку по умолчанию на killuserprocess=yes, поэтому после выхода из сеанса ssh каждый созданный им процесс будет завершен.

Простое исправление (после нескольких часов попыток) запустить screen/tmux с помощью этой команды

Для экрана

systemd-run --scope --user screen

для Tmux

systemd-run --scope --user tmux

Вы можете создать псевдоним, чтобы упростить задачу

alias tmux= "systemd-run --scope --user tmux"

5
27.01.2020, 19:42

Я нашел следующее для работы изhttps://pastebin.com/2cifCXGk(ответа, скопированного из этой ссылки ).

Создайте файл /etc/systemd/system/tmux@.service с содержимым:

[Unit]
Description=Start tmux in detached session
Documentation=man:tmux(1)

[Service]
Type=forking
User=%I
ExecStart=/usr/bin/tmux new-session -s %u -d
ExecStop=/usr/bin/tmux kill-session -t %u

[Install]
WantedBy=multi-user.target

Затем включите службу для каждого пользователя:

sudo systemctl enable tmux@${USER}.service
sudo systemctl start tmux@${USER}.service
sudo systemctl daemon-reload

Кроме того, вы можете поместить этот файл в каталог systemd/User (без User=%I), например ~/.config/systemd/user/tmux.service. Таким образом, служба tmux будет запускаться при входе в систему, если только вы не включите автоматический запуск -пользовательских экземпляров systemd.

2
27.01.2020, 19:42

Теги

Похожие вопросы