Podmanコンテナが勝手に止まる
症状を探してみる
Podman containers are removed when user logs out, systemd kills all user processes.
If you enable linger, that should fix the problem
sudo loginctl enable-linger USERNAME
マジ?
なぜ気づかなかったか?
作業から離れるときも基本的にデタッチして離れてた
そういえばTmuxで全部のセッションを切った時にコンテナが止まっていたような気がしなくもない
念のためコンテナのシャットダウン寸前のログを確かめる
code:plain
journalctl --until="12 hours ago" --since "14 hours ago"
https://static.yokkin.com/akkoma/53edd73b4d8f4d35c23b321958b6137e15aea347f6be111fe6e2ae54466c3930.png
最後の有効なユーザーセッションが切れたのはこの辺?
(いつ自分が本当に切ったのかは覚えてない)
code:plain
Sep 24 19:16:52 pier sshd3494732: pam_unix(sshd:session): session closed for user iigau Sep 24 19:16:52 pier systemd-logind897: Session 5377 logged out. Waiting for processes to exit. Sep 24 19:16:57 pier 672b5e3e4f2a1329: 2024/09/24 19:16:57 modules/ssh/ssh.go:278:sshConnectionFailed() W Failed connection from 144.126.159.131:43802 with error: ssh: password auth not configured Sep 24 19:16:57 pier 672b5e3e4f2a1329: 2024/09/24 19:16:57 modules/ssh/ssh.go:280:sshConnectionFailed() W Failed authentication attempt from 144.126.159.131:43802 Sep 24 19:17:01 pier CRON3500592: pam_unix(cron:session): session opened for user root(uid=0) by root(uid=0) Sep 24 19:17:01 pier CRON3500593: (root) CMD (cd / && run-parts --report /etc/cron.hourly) Sep 24 19:17:01 pier CRON3500592: pam_unix(cron:session): session closed for user root Sep 24 19:17:07 pier 55cdeaf409c81329: たしかにsystemdがuser@1002 (iigau)で動くサービスを切るのと同時にコンテナが停止している
code:plain
Sep 24 19:18:24 pier systemd1: session-5377.scope: Deactivated successfully. Sep 24 19:18:24 pier systemd1: session-5377.scope: Consumed 5.986s CPU time. Sep 24 19:18:24 pier systemd-logind897: Removed session 5377. Sep 24 19:18:32 pier 672b5e3e4f2a1329: 2024/09/24 19:18:32 modules/ssh/ssh.go:278:sshConnectionFailed() W Failed connection from 144.126.159.131:45600 with error: ssh: password auth not configured Sep 24 19:18:32 pier 672b5e3e4f2a1329: 2024/09/24 19:18:32 modules/ssh/ssh.go:280:sshConnectionFailed() W Failed authentication attempt from 144.126.159.131:45600 Sep 24 19:18:34 pier systemd1: Stopping user@1002.service - User Manager for UID 1002... Sep 24 19:18:34 pier systemd1410002: Activating special unit exit.target... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-30f7b7c330dc65e5647baddb3d6427b9221dd279cfa34e4c6c552df866a3f629.scope - libcrun container... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-76da792109f075b5b49e40c76cfdd5eef41a1dd094069b2776315eb08ea85387.scope - libcrun container... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-7c01b046b9840bbb9b434a87e711630b8a1393fb830f2b74b9382a549ced835f.scope - libcrun container... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-9866b8236945819911fec899d4909aafedecbc05ef71aea3bf8aae5fa368ad12.scope - libcrun container... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-b32cb18f965ea94b4e12cd0e39b543c705c5b1ce6612aaf6bb03c91483b4d67b.scope - libcrun container... Sep 24 19:18:34 pier systemd1410002: Stopping libpod-conmon-30f7b7c330dc65e5647baddb3d6427b9221dd279cfa34e4c6c552df866a3f629.scope... 対処法
ユーザーレベルで動いているサービスやプロセスを、ユーザーがログアウトしたときに止めないようにする
この記事では、Arch Wikiの記事を参照しているので、自分も確かめる。
Automatic start-up of systemd user instances
The systemd user instance is started after the first login of a user and killed after the last session of the user is closed. Sometimes it may be useful to start it right after boot, and keep the systemd user instance running after the last session closes, for instance to have some user process running without any open session. Lingering is used to that effect. Use the following command to enable lingering for your own user, if polkit is installed:
systemdのユーザーインスタンスは、ユーザーが最初にログインした後に開始され、ユーザーの最後のセッションが閉じられたときにキルされます。時折、起動のすぐあとにインスタンスを開始して、systemdのユーザーインスタンスを、最後のセッションが閉じたあとも動かし続けられると便利なときがあるかもしれません(たとえばどの有効なセッションがなくてもユーザープロセスを動かし続けさせるためなど)。Lingeringはその趣旨で用いられます。
ということで有効化。
code:plain
loginctl enable-linger
code:plain
loginctl user-status iigau
iigau (1002)
Since: Wed 2024-09-25 07:24:49 JST; 46min ago
State: active
Sessions: *5592
Linger: yes
Unit: user-1002.slice
├─session-5592.scope