Можно ли сохранить работу серверного процесса после выхода из системы?
Обычно я использую screen
, tmux
, или nohup
, все они работают, когда я НЕ использую ssh, а использую машину локально. (На ней также запущен рабочий стол Gnome.)
Итак, есть ли способ запустить серверный процесс, когда вы вошли в систему локально на компьютере?
решение1
Начиная с systemd 230, KillUserProcesses
включено по умолчанию:
https://github.com/systemd/systemd/commit/97e5530cf2076a2b4fc55755917262607aaa6338
Вы можете изменить это, отредактировав /etc/systemd/logind.conf
, например, установив KillUserProcesses=no
глобальное отключение этого поведения или KillExcludeUsers=<your-username>
исключив свое имя пользователя из этого поведения.
Или вы можете обойти это на специальной основе, запустив свой серверный процесс с помощью systemd-run --scope --user <executable>
. Вы можете найти больше подробностей об этом в Example 5. Start screen as a user service
нижней частиsystemd-запуск(1).
решение2
Я использую Debian Stretch, и KillUserProcesses
он отключен по умолчанию в моей системе, но screen
не переживет выход из системы. После некоторых экспериментов, следующее, похоже, сохраняет сеанс экрана запущенным после локального выхода из системы:
screen -m
или если вы хотите отсоединиться немедленно
screen -m -d
Я не уверен, почему так происходит, но мне кажется, это работает.
Редактировать:
Я провел еще несколько тестов, и, похоже, запуск экрана с командой не выживает. Я запустил 4 сеанса и отключался от них при необходимости:
Перед выходом из системы:
user 31365 1 0 16:20 ? 00:00:00 SCREEN -S mdc -m -d vim
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31391 1 0 16:20 ? 00:00:00 SCREEN -S mc -m vim
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
После выхода из системы и повторного входа:
user 31376 1 0 16:20 ? 00:00:00 SCREEN -S md -m -d
user 31399 1 0 16:21 ? 00:00:00 SCREEN -S m -m
Похоже, что два экземпляра, запущенные командой, были завершены во время выхода из системы. Я присоединился к оставшимся двум сеансам и запустил VIM, затем отсоединился и снова вышел из системы. После повторного входа в систему сеансы все еще работали, и VIM все еще работал в каждом сеансе.