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デーモンは存続すると予想されます。
繰り返しになりますが、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セッションを含むシステムは、特にそれらが多数含まれる場合、ユーザーごとのサービス管理を何度も開始および停止するというこの問題があります。