在使用podman创建无根用户服务时, 除了通过systemctl enable ...设置开机自启, 还需要在当前用户执行 loginctl enable-linger`, 那么这个命令到底是做什么的呢?
loginctl 并不是一个常用 Linux 命令,大部分时候都用不到它。这个命令隶属于 Systemd 的一部分,是 systemd 的登录管理器。
loginctl 命令格式
| 1 | loginctl [选项...] {命令} [用户名...] | 
loginctl 命令示例
列出登录的用户:
| 1 | loginctl list-users | 
列出登录的用户和会话:
| 1 | loginctl list-sessions | 
列出当前用户的登录信息:
| 1 | loginctl show-user $USER | 
Systemd 支持通过 --user 参数管理用户级别的后台程序,不过这存在一个问题,如果用户退出登录后,属于该用户的后台服务会被终止。如果希望用户退出后仍然保持服务的运行,可以使用下面的命令启用用户的逗留状态:
| 1 | loginctl enable-linger $USER | 
loginctl 命令选项
| 缩写 | 完整名称 | 说明 | 
|---|---|---|
| --no-ask-password | 在执行特权操作时不向用户索要密码。 | |
| -p | --property= | 在显示 session/user/seat 属性时, 仅显示此处指定的属性。 若未指定,则显示全部属性。 参数必须是属性名(例如”Sessions”)。 可以多次使用此选项以指定多个属性。 | 
| --value | 在使用 show显示属性时, 仅显示属性值,而不显示属性名及等号。 | |
| -a | --all | 在显示 session/user/seat 属性时, 显示全部属性,无论这些属性是否已经被设置。 | 
| -l | --full | 在显示进程树的时候,不对超长行进行截断。 | 
| --kill-who= | 与 kill-session 连用,指定杀死哪个进程。 leader表示仅杀死会话的领导进程;all表示杀死会话的所有进程。 默认值为all | |
| -s | --signal= | 与 kill-session 或 kill-user 连用, 指定向选中的进程发送什么信号。 必须设为众所周知的信号名称,例如 SIGTERM(默认值), SIGINT, SIGSTOP 之类 | 
| -n | --lines= | 与 user-status 或 session-status 连用, 控制显示多少行日志(从最新的一条日志开始计算)。 必须设为一个正整数,默认值是”10″。 | 
| -o | --output= | 与 user-status 或 session-status 连用, 控制日志的输出格式。 可用值参见 journalctl(1) 手册。默认为 “short” | 
| -H | --host= | 操作指定的远程主机。可以仅指定一个主机名(hostname), 也可以使用 “username@hostname” 格式。 hostname 后面还可以加上容器名(以冒号分隔), 也就是形如 “hostname:container” 的格式, 以表示直接连接到指定主机的指定容器内。 操作将通过 SSH 协议进行,以确保安全。 可以通过 machinectl -H HOST命令列出远程主机上的所有容器名称。 | 
| -M | --machine= | 在本地容器内执行操作。 必须明确指定容器的名称。 | 
| --no-pager | 不将程序的输出内容管道(pipe)给分页程序。 | |
| --no-legend | 不输出列标题, 也就是不在输出列表的头部和尾部显示字段的名称。 | |
| -h | --help | 显示简短的帮助信息并退出。 | 
| --version | 显示简短的版本信息并退出。 | 
loginctl 参数命令
loginctl 有三种参数命令,分别是:会话命令,用户命令和席位命令。
会话命令
| 名称 | 说明 | 
|---|---|
| list-sessions | 列出当前所有的会话。这是默认命令。 | 
| session-status[ID…] | 显示简洁的会话状态信息,后跟最近的日志。 如果指定了会话ID,那么仅显示指定的会话, 否则显示当前调用者的会话。 此命令主要用于输出人类易读的信息, 如果你想输出易于程序分析的信息, 那么应该使用 show-session命令 | 
| show-session[ID…] | 如果指定了会话ID,那么显示指定会话的各项属性值, 否则显示登陆管理器自身的各项属性值。 除非使用了 --all选项, 否则空属性将被忽略。 还可以使用--property=选项指定仅显示个别属性。 此命令主要用于输出易于程序分析的信息, 如果你想输出人类易读的信息, 那么应该使用session-status命令。 | 
| activate[ID] | 激活会话。 也就是将处于后台的会话切换到前台(如果同席位的另一个会话正处于前台)。 如果指定了会话ID, 那么将激活指定的会话, 否则将激活当前调用者的会话。 | 
| lock-session[ID…],unlock-session[ID…] | 锁定/解锁会话(如果会话支持屏幕锁)。 如果指定了会话ID,那么将锁定/解锁指定的会话, 否则将锁定/解锁当前调用者的会话。 | 
| lock-sessions,unlock-sessions | 锁定/解锁所有支持屏幕锁的会话。 | 
| terminate-sessionID… | 结束指定的会话。 也就是杀死指定会话的所有进程、释放所有与此会话相关的资源。 | 
| kill-sessionID… | 向指定的会话进程发送信号。 使用 --kill-who=指定目标进程, 使用--signal=指定要发送的信号。 | 
用户命令
| 名称 | 说明 | 
|---|---|
| list-users | 列出当前登录的用户。 | 
| user-status | [USER…] 显示简洁的已登录用户信息,后跟最近的日志。 如果指定了用户名或UID, 那么仅显示指定的用户, 否则显示当前调用者的用户。 此命令主要用于输出人类易读的信息, 如果你想输出易于程序分析的信息, 那么应该使用 show-user命令。 | 
| show-user[USER…] | 如果指定了用户名或UID,那么显示指定用户的各项属性值, 否则显示登陆管理器自身的各项属性值。 除非使用了 --all选项, 否则空属性将被忽略。 还可以使用--property=选项来显示指定的属性。此命令主要用于输出易于程序分析的信息, 如果你想输出人类易读的信息, 那么应该使用user-status命令。 | 
| enable-linger[USER…],disable-linger[USER…] | 启用/禁止用户逗留(相当于保持登录状态)。 如果指定了用户名或UID, 那么系统将会在启动时自动为这些用户派生出用户管理器, 并且在用户登出后继续保持运行。 这样就可以允许未登录的用户在后台运行持续时间很长的服务。 如果没有指定任何参数, 那么将作用于当前调用者的用户。 | 
| terminate-userUSER… | 结束指定用户的所有会话。 这将杀死该用户的所有会话中的所有进程, 同时释放与此用户有关的所有资源。 | 
| kill-userUSER… | 向指定用户的所有进程发送 --signal=选项指定的信号。 | 
席位命令
| 名称 | 说明 | 
|---|---|
| list-seats | 列出当前本机上的所有可用席位 | 
| seat-status[NAME…] | 显示简洁的席位信息,后跟最近的日志。 如果指定了席位名,那么仅显示指定的席位, 否则显示当前调用者会话所属的席位。 此命令主要用于输出人类易读的信息, 如果你想输出易于程序分析的信息, 那么应该使用 show-seat命令。 | 
| show-seat[NAME…] | 如果指定了席位名,那么显示指定席位的各项属性值, 否则显示登陆管理器自身的各项属性值。 除非使用了 --all选项, 否则空属性将被忽略。 还可以使用--property=选项来显示指定的属性。 此命令主要用于输出易于程序分析的信息, 如果你想输出人类易读的信息, 那么应该使用seat-status命令。 | 
| attachNAME DEVICE… | 将指定的设备(DEVICE)持久的连接到指定的席位(NAME)上。 设备可以用相对于 /sys 文件系统的设备路径表示。 要创建一个新席位,至少需要连接一个显卡。 席位名称必须以 “seat” 开头, 后跟 a–z, A–Z, 0–9, “-“, “_” 字符。 要想从席位上删除一个设备, 可以将此设备连接到另一个席位, 或者使用 flush-devices命令。 | 
| flush-devices | 删除所有先前用 attach命令连接的设备(同时也删除了所有先前用attach命令创建的席位)。 调用此命令之后,所有自动生成的席位将会被保留, 同时所有席位设备将会连接到自动生成的席位上。 | 
| terminate-seatNAME… | 结束指定席位上的所有会话。 这将杀死指定席位上的所有会话进程, 同时释放与之关联的所有资源。 | 
Views: 6

