InstaBox 虚拟机运维笔记:用户会话、时区与进程时间排查

一、w 显示用户数与列表不一致

现象

w 头部显示 4 users,下方只列出一条 pts/2 会话。

原因

  • InstaBox 云虚拟机通过 SSH 网关接入,配合 systemd-logind 管理会话。
  • 之前断开的 SSH 连接未被 logind 及时回收,形成残留(幽灵)会话,被计入人数统计,但不出现在 w 明细中。
  • w 头部计数与明细列表可能来自不同统计源,在网关代理 + systemd 环境下会暂时不一致。
  • CLASS 为 manager 的 session 是用户级 systemd --user 实例,不计入 w 的 users。

排查命令

loginctl list-sessions      # 查看 systemd 侧所有会话
loginctl show-session <ID>  # 查看单个会话状态(State=closing / Active=no 即为残留)
who                         # 查看真实登录记录
ps aux | grep -E "sshd|pts" # 检查残留 sshd/pts 进程

解决方案

systemctl restart systemd-logind
  • 强制 logind 重新扫描并丢弃无效会话。
  • 不会断开当前 SSH 连接,纯 SSH 环境无副作用。
  • 执行后 w、who、loginctl 三者一致。

正常状态基准

  • loginctl 应显示 2 个 session:1 个 CLASS user(真实登录)+ 1 个 CLASS manager(用户级 systemd 实例)。
  • w 与 who 均只显示当前 1 条登录。

二、系统时区确认

结论

InstaBox 虚拟机默认运行在 UTC 时区,date、uptime、ps lstart 均按 UTC 显示。

确认命令

timedatectl
date +"%Z %z"

改为北京时间

timedatectl set-timezone Asia/Shanghai
  • 临时查看北京时间:TZ='Asia/Shanghai' date
  • 修改后所有时间显示(date/uptime/ps lstart)统一为北京时间,无需手动 +8 换算。

三、时间换算与进程时间排查

UTC 与北京时间换算规则

北京时间 = UTC + 8 小时。

查询进程启动时间

pgrep -f "python3 -m http.server 8080"   # 获取 PID
ps -p <PID> -o lstart=                    # 查看启动时间(跟随系统时区)

查询开机/运行时长

uptime

开机时间 = 当前系统时间 − 已运行时长。

本次实例时间线(北京时间)

事件北京时间
开机/重启2026-11-12 约 05:09
python3 -m http.server 8080 启动2026-11-12 06:32:13
查询时当前时间2026-11-12 08:55

四、核心要点速查

问题命令 / 结论
w 人数虚高systemctl restart systemd-logind
查看真实登录who
查看 systemd 会话loginctl list-sessions
确认时区timedatectl
改北京时间timedatectl set-timezone Asia/Shanghai
查进程启动时间ps -p <PID> -o lstart=
查开机时长uptime
UTC 转北京时间+8 小时

标签: none

添加新评论