ローカル(SSHではない)セッションからログアウトした後もプロセスを維持する

ローカル(SSHではない)セッションからログアウトした後もプロセスを維持する

マシンからログアウトした後もサーバー プロセスを実行し続けることは可能ですか?

screen通常、私は、、tmuxまたはを使用しますnohup。これらはすべて、ssh を使用しておらず、マシンをローカルで使用している場合に役立ちます。(Gnome デスクトップも実行されています。)

では、ローカルマシンにログインしているときにサーバープロセスを開始する方法はありますか?

答え1

systemd 230 以降では、KillUserProcessesデフォルトで有効になっています。

https://github.com/systemd/systemd/commit/97e5530cf2076a2b4fc55755917262607aaa6338

これを変更するには、編集します/etc/systemd/logind.conf。たとえば、この動作をグローバルに無効にするように設定したりKillUserProcesses=noKillExcludeUsers=<your-username>ユーザー名をこの動作から除外するように設定したりします。

または、を使用してサーバープロセスを開始することで、アドホックベースでこの問題を回避することもできますsystemd-run --scope --user <executable>。これに関する詳細は、Example 5. Start screen as a user serviceの下部にあります。systemd-run(1)

答え2

私は Debian Stretch を実行していますが、KillUserProcessesシステム上ではデフォルトで無効になっていますが、screenログアウトすると無効になります。いくつか実験した結果、次の方法ではローカルでログアウトした後も screen セッションが継続されるようです。

screen -m

またはすぐに切り離したい場合

screen -m -d

なぜそうなるのかは分かりませんが、私の場合はうまくいっているようです。

編集:

さらにテストしてみたところ、コマンドで screen を実行してもうまくいかないようです。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

コマンドで起動した 2 つのインスタンスがログアウト中に終了したようです。残りの 2 つのセッションに接続して VIM を起動し、その後デタッチして再度ログアウトしました。再度ログインした後、セッションはまだ実行されており、各セッションで VIM も実行されていました。

関連情報