podman在用户退出时服务中断

现象

自己通过podman generate生成了systemd文件,再文件中指定运行用户User=xxx,放置在/etc/systemd/system文件夹,想通过systemd来管理其服务。但是该服务总是在登录用户退出后就中断了。

原因

systemd 用户实例在用户首次登陆时启动,并在最后一个会话退出时终止。 

参照:Systemd/用户

解决方法

1、调整文件放置位置

因为podman运行时不需要root权限,在root用户下运行容器也违背了我们的初衷,之前想通过在service文件中指定用户也有点本末倒置了。正确的方式应该是将service文件放置在~/.config/systemd/user/文件夹中。

2、非用户模式的systemd

通过systemctl --user来运行用户模式下的systemd

$ systemctl --user enable xx  
$ systemctl --user start xx  

通过这样指定之后,用户登录时就会自动运行,同时在用户最后一个会话登出时会自动终止。

3、启用用户登录驻留

为避免用户登出后服务中断可通过以下命令来启用驻留指定用户:

# loginctl enable-linger username