Как я могу исправить nohup, byobu, tmux, screen и т. Д., Чтобы они не умирали при отключении от SSH?

Я использую KDE Neon, который является Ubuntu 18.04 Bionic (LTS) с последними пакетами KDE для настольных ПК.

После перехода на эту версию с Xenial я утратил способность процессов переживать разрывы сеансов SSH ... в частности, nohup, tmux, screen, byobu и все их дети убиваются при отключении.

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

# connect over ssh
cd /tmp
nohup watch date &
ps -ef | grep watch
# disconnect and reconnect
ps -ef | grep watch # process is gone

Я попытался вернуть tmux и byobu к более старым версиям, прежде чем обнаружил nohup. Это наводит меня на мысль, что это либо SSHd config, либо systemd.

Очевидно, systemd решил изменить свое поведение по умолчанию, чтобы обнулить все пользовательские процессы, когда пользователь отключается некоторое время назад. Я попытался восстановить поведение, отредактировав /etc/systemd/logind.conf и установив KillUserProcesses = no, а затем перезагрузившись (перезапуск службы systemd-logind не работал). Это не сработало ... Я в своем уме.

Помогите!

1
задан 28 August 2019 в 23:28

2 ответа

Вы хотите использовать setsid команда для создания этого лидером сессии.

nohup означает, "нет зависают", который по большей части просто разъединяет различные стандартные потоки ввода/вывода, но тот процесс все еще "принадлежит" процессу удара, который в свою очередь принадлежит процессу SSH. Когда Вы разъединяетесь от SSH, все те дочерние процессы идут с ним.

При помощи setsid Вы повторно порождаете процесс за пределами объема SSH.

0
ответ дан 7 December 2019 в 18:57

У меня только что была точно та же проблема, по совпадению также с Ubuntu 18.04 с пакетами KDE Neon, установленными постфактум.

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

Чтобы исправить, выполните следующие действия:

  1. Внесите следующие изменения в /etc/systemd/logind.conf:

     KillUserProcesses=no
    KillExcludeUsers=root YOUR_USER_NAME
     

    и перезапустите systemd-logind с помощью:

     sudo systemctl перезапустить systemd-logind
     
  2. Включите задержку для вашей учетной записи с помощью:

     loginctl enable-linger YOU_USER_NAME
     

Сначала у меня были включены только затяжные процессы и KillUserProcesses=no, но мой tmux все равно был уничтожен.Только после того, как я изменил KillExcludeUsers (спасибо https://askubuntu.com/a/1097134/59971 ), я смог спокойно продолжить обучение нейронной сети.

3
ответ дан 12 April 2020 в 13:48

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

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