Systemd убивает все фоновые процессы после завершения сессии ssh, несмотря на все типичные решения.

Вопрос или проблема

Я перепробовал почти все решения на Stack Exchange (кроме nohup; кажется, это не идеальная лазейка), но Systemd все равно убивает мои фоновые процессы.

Я также пытался запустить сессию Tmux в качестве службы, используя этот вопрос, но процессы, запущенные в Tmux, все равно завершаются после отключения SSH.

Я использую Ubuntu 22.04, настольную версию. Мой монитор отключен, но я не настроил безголовый режим, поэтому меня интересует, нужно ли в настольной версии оставлять монитор подключенным после локального входа. Отключение монитора может привести к тому, что Systemd сделает вывод о том, что ни один пользователь не активен, согласно этому архиву электронной почты.

Я перепробовал почти все решения на Stack Exchange (кроме nohup; кажется, это не идеальная лазейка), но Systemd все равно убивает мои фоновые процессы.

Я собираюсь повторить то же самое решение, независимо от этого:

  1. Запустите loginctl enable-linger <user>, чтобы сказать systemd-logind всегда держать менеджер служб ‘systemd –user’ для этого пользователя. Я не помню, подавляет ли это также завершение “сессионных” процессов – если подавляет, отлично – но это не основная причина для этого предложения.

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

  2. Либо a) используйте современную версию tmux, которая интегрируется с systemd и запускает каждую панель в своем собственном “scope” systemd (как можно увидеть в /proc/self/cgroup внутри tmux),

    либо b) используйте systemd-run --user, чтобы запускать ваши долгоживущие процессы под менеджером служб (и, следовательно, вне вашей сеансовой сессии),

    либо c) напишите единицы службы в ~/.config/systemd/user/ для долгосрочных процессов и systemctl --user start их.

Отключение монитора может привести к тому, что Systemd сделает вывод о том, что ни один пользователь не активен, согласно этому архиву электронной почты.

Связанный пост не имеет ничего общего с мониторами. Он касается сессий последовательной консоли (порта RS232).

Ответ или решение

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

Проблема

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

Потенциальные Решения

  1. Настройка linger режима:
    Выполните команду:

    loginctl enable-linger <user>

    Это указывает системе systemd-logind всегда поддерживать активным менеджер служб для указанного пользователя, даже если его сессия закрыта. Постановка в режим linger позволит вашему процессу продолжать функционировать даже после завершения SSH-сеанса.

  2. Использование tmux или screen:
    tmux и screen являются мультиплексорами терминала, которые позволяют продолжать работу с запущенными сессиями после отключения. Убедитесь, что вы используете последнюю версию tmux, совместимую с системным менеджером, которая создает отдельный scope для каждого окна. Это можно проверить через:

    cat /proc/self/cgroup | grep tmux

    Если tmux был настроен корректно, вы должны увидеть, что процессы внутри tmux работают в рамках отдельной иерархии cgroup.

  3. Запуск процессов с использованием systemd-run:
    Вы можете запустить свои долгоживущие процессы под управлением systemd:

    systemd-run --user <команда>

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

  4. Создание пользовательских единиц systemd:
    Если вы хотите, чтобы определенные процессы запускались автоматически, вы можете создать servicel-файлы в ~/.config/systemd/user/ и управлять ими через systemctl --user.

Влияние отсутствия монитора

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

Заключение

Ваши фоны процессы могут быть сохранены сильнее, если вы будете использовать системные сервисы и механизмы, такие как tmux или screen, а не полагаться только на SSH-сессии. Убедитесь, что установленная вами конфигурация системы поддерживает работу с фоновыми процессами, даже после отключения от SSH. Их использование позволит вам эффективно управлять прогрессом ваших задач без зависимости от состояния сети или состояния подключения устройства.

Оцените материал
Добавить комментарий

Капча загружается...