systemd linger: 注销后保持用户服务运行

linger 是 systemd-logind 的一个按用户设置的开关。打开后,这个用户的 systemd 用户实例(user@UID.service)在开机时就启动,并且在用户所有会话都退出后也继续运行。它解决的问题是:用 systemctl --user 管理的服务,默认只在用户登录期间存在。 默认行为(没有 linger) 每个用户有一个自己的 systemd 实例 user@UID.service,systemctl --user 操作的就是它。默认情况下: 用户第一次登录(SSH、图形界面、TTY 都算)时,logind 启动 user@UID.service,同时创建 /run/user/UID(即 XDG_RUNTIME_DIR) 用户最后一个会话结束后(默认再等 UserStopDelaySec=10s),logind 停掉 user@UID.service,删除 /run/user/UID 机器重启后,用户不登录,user@UID.service 就不会启动 结果是:systemctl --user enable 的服务,在用户登出后会被停掉,重启后要等用户登录才会起来;用户级的 timer 在没人登录时也不会触发。 打开 linger 之后 开机时就启动 user@UID.service,不等登录 所有会话退出后,user@UID.service 和 /run/user/UID 继续保留 用户级服务、timer、socket 像系统服务一样常驻 linger 只决定用户实例的生命周期,对系统级服务(/etc/systemd/system 下的 unit)没有影响。 命令 # enable linger for the current user (needs sudo or polkit auth) sudo loginctl enable-linger $USER # disable it sudo loginctl disable-linger $USER # check: Linger=yes / no loginctl show-user $USER -p Linger # logind keeps one empty marker file per lingering user ls /var/lib/systemd/linger/ /var/lib/systemd/linger/<user> 这个空文件就是全部的持久化状态,enable-linger 创建它,disable-linger 删掉它。做配置管理时(比如 Ansible),可以用这个文件判断是否已经打开: ...

Created 17176-10-17 · Updated 17176-10-17 · 2 min · 219 words · -

nerdctl

nerdctl nerdctl 是 containerd 的命令行客户端工具,它提供了与 Docker CLI 兼容的用户体验。 什么是 nerdctl containerd 的 CLI 工具:nerdctl 全称是 “non-enterprise control”(或 containerd ctl) Docker 兼容:命令语法与 docker 命令高度兼容,降低学习成本 CNCF 项目:由 containerd 社区开发和维护 功能丰富:支持 Docker 不支持的一些高级功能 主要特性 1. Docker 兼容性 nerdctl 的命令与 docker 几乎完全兼容,可以无缝切换: # Docker 命令 docker run -d -p 80:80 nginx docker ps docker images docker build -t myapp . # nerdctl 命令(完全相同) nerdctl run -d -p 80:80 nginx nerdctl ps nerdctl images nerdctl build -t myapp . 2. 增强功能 nerdctl 支持一些 Docker 不支持的高级特性: ...

Created 29296-04-29 · Updated 29296-04-29 · 7 min · 1334 words · -