web-dev-qa-db-ja.com

systemdユーザーサービスをmosh上でどのように維持しますか?

Archマシンでユーザーレベルのsystemdサービスとしていくつかのサービス(syncthingなど)を設定しています。 sshで接続するとうまく機能しますが、moshを使用して接続すると、起動してすぐに停止するように見えます。たとえば、moshに接続し、systemctl --user status syncthingを実行して、実行中またはシャットダウン中であることを確認できます。次に、コマンドを繰り返すと、

Failed to connect to bus: No such file or directory

他の同様の質問に基づいて、$XDG_RUNTIME_DIRがmoshセッション内で設定されていることを確認しました。

$ echo $XDG_RUNTIME_DIR
/run/user/1000

実際、セッションに接続しているにもかかわらず、ユーザーマネージャーが正常にシャットダウンしているようです。

$ systemctl status [email protected][email protected] - User Manager for UID 1000
   Loaded: loaded (/usr/lib/systemd/system/[email protected]; static; vendor preset: disabled)
   Active: inactive (dead)

[...]
Aug 16 18:36:56 ip-172-70-3-138 systemd[7804]: Closed GnuPG cryptographic agent and passphrase cache (restricted).
Aug 16 18:36:56 ip-172-70-3-138 systemd[7804]: Reached target Shutdown.
Aug 16 18:36:56 ip-172-70-3-138 systemd[7804]: Starting Exit the Session...
Aug 16 18:36:56 ip-172-70-3-138 systemd[7804]: Received SIGRTMIN+24 from PID 7877 (kill).
Aug 16 18:36:56 ip-172-70-3-138 systemd[1]: Stopped User Manager for UID 1000.

サービスを存続させるにはどうすればよいですか?


更新: Tmuxセッション自体は、少なくとも私のシステムでは、systemdサービスを開始または維持しません。私はそれが正しい振る舞いであるかどうかを知ることができませんでしたが、tmuxセッションはsystemdが物事を閉じないようにするべきだと私には思えます。 emacsclientを使用してファイルを編集している場合を考えてみましょう。moshまたはtmuxのどちらを使用していても、接続が1分間切断された場合、emacsデーモンは存続すると予想されます。

2
Violet

繰り返しになりますが、systemdのユーザースペースログインセッションの概念と、moshなどのプログラムの動作との間に不一致があります。 (これは、そのような競合だけではありません。 tmux、screen、新しいデーモンモードのemacs、delugedなどに問題があります。 ただし、これらはこの回答の範囲内ではありません。 )

Systemdの概念は、bodgePAMプラグインがログインセッションのセットアップとティアダウンをlogindに伝達し、logindがユーザーごとのサービス管理の開始と停止を、最初のログで処理するというものです。オンにして、最後にログオフします。

これは、mosh-serverを開始するために使用しているSSHセッションで有効になります。ただし、そのセッションは短命であり、mosh-serverが起動して実行された後に終了します。さらに、mosh-serverはログインプログラムではなく、PAMとは関係がないため、bodgePAMプラグインは機能しません。その結果、logindは非常に短命のSSHセッションを1つだけ認識し、その結果、ユーザーごとのサービス管理サブシステムが開始され、すぐに再び停止します。

Systemdがこれに対処する唯一の方法は、ユーザーごとのサービス管理が最終的なログオフ後に「長引く」ことをloginctlに伝えることです。これは、logindコマンドのenable-lingerサブコマンドを使用して行います。

さらに、これはモッシュだけに当てはまるわけではありません。短期間のSSHセッションを含むシステムは、特にそれらが多数含まれる場合、ユーザーごとのサービス管理を何度も開始および停止するというこの問題があります。

参考文献

0
JdeBP