Вопрос или проблема
Я перепробовал почти все решения на Stack Exchange (кроме nohup
; кажется, это не идеальная лазейка), но Systemd все равно убивает мои фоновые процессы.
Я также пытался запустить сессию Tmux в качестве службы, используя этот вопрос, но процессы, запущенные в Tmux, все равно завершаются после отключения SSH.
Я использую Ubuntu 22.04, настольную версию. Мой монитор отключен, но я не настроил безголовый режим, поэтому меня интересует, нужно ли в настольной версии оставлять монитор подключенным после локального входа. Отключение монитора может привести к тому, что Systemd сделает вывод о том, что ни один пользователь не активен, согласно этому архиву электронной почты.
Я перепробовал почти все решения на Stack Exchange (кроме nohup; кажется, это не идеальная лазейка), но Systemd все равно убивает мои фоновые процессы.
Я собираюсь повторить то же самое решение, независимо от этого:
-
Запустите
loginctl enable-linger <user>
, чтобы сказать systemd-logind всегда держать менеджер служб ‘systemd –user’ для этого пользователя. Я не помню, подавляет ли это также завершение “сессионных” процессов – если подавляет, отлично – но это не основная причина для этого предложения.По умолчанию systemd-logind запускает менеджер служб на пользователя, когда у этого пользователя есть какие-либо сессии, и останавливает его, когда последняя сессия закрыта. С установленным флагом linger менеджер служб будет запущен при загрузке и остановлен при выключении.
-
Либо 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 может интерпретировать это как завершение пользовательской сессии. В результате все процессы, связанные с этой сессией, останавливаются. Причины этого могут быть связаны с тем, что система не распознает сохраняемую вами сессию как активную из-за отсутствия подключенного монитора или любого другого устройства ввода-вывода.
Потенциальные Решения
-
Настройка linger режима:
Выполните команду:loginctl enable-linger <user>
Это указывает системе systemd-logind всегда поддерживать активным менеджер служб для указанного пользователя, даже если его сессия закрыта. Постановка в режим linger позволит вашему процессу продолжать функционировать даже после завершения SSH-сеанса.
-
Использование tmux или screen:
tmux и screen являются мультиплексорами терминала, которые позволяют продолжать работу с запущенными сессиями после отключения. Убедитесь, что вы используете последнюю версию tmux, совместимую с системным менеджером, которая создает отдельный scope для каждого окна. Это можно проверить через:cat /proc/self/cgroup | grep tmux
Если tmux был настроен корректно, вы должны увидеть, что процессы внутри tmux работают в рамках отдельной иерархии cgroup.
-
Запуск процессов с использованием systemd-run:
Вы можете запустить свои долгоживущие процессы под управлением systemd:systemd-run --user <команда>
Это обеспечит, что процессы будут работать независимо от вашей пользовательской сессии.
-
Создание пользовательских единиц systemd:
Если вы хотите, чтобы определенные процессы запускались автоматически, вы можете создать servicel-файлы в~/.config/systemd/user/
и управлять ими черезsystemctl --user
.
Влияние отсутствия монитора
Как вы правильно заметили, отключение монитора может повлиять на поведение системы. В некоторых конфигурациях могут присутствовать механизмы, которые, интерпретируя отсутствие активных устройств, признают, что пользователь не активен, и завершают связанные процессы. Хотя приведённая вами ссылка касается последовательных консольных сессий, подобный подход может срабатывать и в вашем случае.
Заключение
Ваши фоны процессы могут быть сохранены сильнее, если вы будете использовать системные сервисы и механизмы, такие как tmux или screen, а не полагаться только на SSH-сессии. Убедитесь, что установленная вами конфигурация системы поддерживает работу с фоновыми процессами, даже после отключения от SSH. Их использование позволит вам эффективно управлять прогрессом ваших задач без зависимости от состояния сети или состояния подключения устройства.